Linux x86 компилятор g++. Не получается создать массив с кол-вом int
элементов, пробовал даже int
заменять на double
все ровно пишет size of array is too large
, как создать массив с максимальным кол-вом элементов? Или какой тогда максимальный размер массива? Пробовал unsigned int
все ровно та же ошибка.
#include <iostream>
#include <cstdlib>
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;
}
Максимальный размер массива зависит от количества доступной памяти.
Если создаёте массив на стеке (как в коде из вопроса), то память ограничена размером стека (дефолтный размер стека в линуксе можно посмотреть командой ulimit -s
, его так же можно увеличить через настройки компилятора). Допустим, у вас дефолтный размер стека равен 10 Мб, тогда максимальный размер массива int32
получается 10*1024*1024 / 4 = 2621440
элементов. Но весь стек заюзать не получится, т.к. он нужен ещё и для хранения локальных переменных и параметров функций.
Если создавать массив в динамической памяти (через malloc
), то для 32-х битного приложения доступно максимум 2 Гб оперативки (но реально до 1,5 Гб можно успешно выделить). Тогда расчёты будут такими: 2*1024*1024*1024 / 4 = 536870912
элементов.
А теперь сравните полученные цифры с вашими.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Я хочу вывести График, после нажатой кнопкиНо у меня окошко появляется и сразу исчезает
Недавно решил перейти к изучению С++ и QT (до этого изучал Си) и хотел прояснить несколько вещей для себяПрошу не ругать меня строго, так как...