#cpp #массивы
Linux x86 компилятор g++. Не получается создать массив с кол-вом int элементов, пробовал даже int заменять на double все ровно пишет size of array is too large, как создать массив с максимальным кол-вом элементов? Или какой тогда максимальный размер массива? Пробовал unsigned int все ровно та же ошибка. #include#include using namespace std; int main(int argc, char const *argv[]) { cout << "RAND_MAX: " << RAND_MAX << endl; cout << "RAND_NUM: " << RAND_NUM << endl; int a[2147483646]; for (int i = 0; i < 2147483646; i++){ a[i] = rand(); } return 0; }
Ответы
Ответ 1
Максимальный размер массива зависит от количества доступной памяти. Если создаёте массив на стеке (как в коде из вопроса), то память ограничена размером стека (дефолтный размер стека в линуксе можно посмотреть командой ulimit -s, его так же можно увеличить через настройки компилятора). Допустим, у вас дефолтный размер стека равен 10 Мб, тогда максимальный размер массива int32 получается 10*1024*1024 / 4 = 2621440 элементов. Но весь стек заюзать не получится, т.к. он нужен ещё и для хранения локальных переменных и параметров функций. Если создавать массив в динамической памяти (через malloc), то для 32-х битного приложения доступно максимум 2 Гб оперативки (но реально до 1,5 Гб можно успешно выделить). Тогда расчёты будут такими: 2*1024*1024*1024 / 4 = 536870912 элементов. А теперь сравните полученные цифры с вашими.
Комментариев нет:
Отправить комментарий