Максимальный размер массива C++

334
29 января 2018, 06:31

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;
}
Answer 1

Максимальный размер массива зависит от количества доступной памяти.

Если создаёте массив на стеке (как в коде из вопроса), то память ограничена размером стека (дефолтный размер стека в линуксе можно посмотреть командой ulimit -s, его так же можно увеличить через настройки компилятора). Допустим, у вас дефолтный размер стека равен 10 Мб, тогда максимальный размер массива int32 получается 10*1024*1024 / 4 = 2621440 элементов. Но весь стек заюзать не получится, т.к. он нужен ещё и для хранения локальных переменных и параметров функций.

Если создавать массив в динамической памяти (через malloc), то для 32-х битного приложения доступно максимум 2 Гб оперативки (но реально до 1,5 Гб можно успешно выделить). Тогда расчёты будут такими: 2*1024*1024*1024 / 4 = 536870912 элементов.

А теперь сравните полученные цифры с вашими.

READ ALSO
Окно появляется и сразу исчезает

Окно появляется и сразу исчезает

Я хочу вывести График, после нажатой кнопкиНо у меня окошко появляется и сразу исчезает

209
QT, C++, Linux и Vim

QT, C++, Linux и Vim

Недавно решил перейти к изучению С++ и QT (до этого изучал Си) и хотел прояснить несколько вещей для себяПрошу не ругать меня строго, так как...

319