Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

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

#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 элементов. А теперь сравните полученные цифры с вашими.

Комментариев нет:

Отправить комментарий