Подтвердить что ты не робот

Каково максимальное количество разрешений для массива на С++?

Вы можете объявить очень простой массив с 10 элементами и использовать его таким образом:

int myArray[10];
myArray[4] = 3;
std::cout << myArray[4];

Или объявите 2d-массив с элементами 10x100 как int myArray[10][100];

Даже создайте более сложные 3-мерные массивы с помощью int myArray[30][50][70];

Я даже могу дойти до записи:

int complexArray[4][10][8][11][20][3];
complexArray[3][9][5][10][15][3] = 5;
std::cout <<  complexArray[3][9][5][10][15][3];

Итак, каково максимальное количество измерений, которое можно использовать при объявлении массива?

4b9b3361

Ответ 1

Стандарт рекомендует реализациям принять не менее 256 (ISO 14882, B.2), но они могут поддерживать меньше или больше:

Пределы могут ограничивать количества, которые включают в себя описанные ниже или другие. Число в скобках после каждого количества рекомендуется как минимум для этого количества. Однако эти величины только рекомендации и не определяют соответствия.

[...]

- указатели, массивы и функции (в любой комбинации), изменяющие арифметику, структуру, объединение или неполный тип в объявлении [256].

Это то же самое и в С++ 03 и С++ 11.

Ответ 2

Мой первый пост!

Для чего это стоит, предел в моей системе составляет всего 30 измерений при распределении статически и 19 измерений при распределении в стеке. Системой является AMD A10-7700K, 64-разрядная (8 ГБ оперативной памяти). Скомпилирован на Visual С++ 2013 с настройками по умолчанию.

Обратите внимание, что для определения максимума в вашей системе используйте наименьший тип данных (char) с наименьшим размерным размером (2). Нет предела, когда размерность равна 1, поскольку размерность 1 (в любом измерении) является избыточной и не влияет на общий размер массива. Разумеется, чем больше тип данных, тем больше размер измерения, тем меньше у вас размеров. Однако я обнаружил, что любое (и только одно) измерение может быть 3, но не 4.

#include<iostream>
int main()
{
   char a[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // ok
   char b[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // fail!
   static char c[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // ok
   static char d[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // fail!

}

Ответ 3

Единственный предел, который вы имеете при написании массивов, - это объем памяти вашего компьютера.