Я недавно перешел на новый ноутбук - HP dv6119tx (Intel Core i5, 4 ГБ оперативной памяти). На нем установлена 64-битная Windows 7 Home Premium.
Я пытаюсь создать массив типа int
длиной 10 ^ 6 в C ++ (Dev C ++), который я использовал для удобного создания на своем последнем ноутбуке (32-битная Windows 7 Ultimate / Ubuntu Linux, 2 ГБ ОЗУ) и все остальные среды, в которых я запрограммирован (должно занимать около 3,5 МБ ОЗУ). Но при текущей настройке я получаю ошибку «Ошибка сегментации» в режиме отладки.
![Screenshot when I am trying to create an array of length 10^5](https://i.stack.imgur.com/pjMBp.png)
![Screenshot when I am trying to create an array of length 10^6](https://i.stack.imgur.com/IltRS.png)
СКРИНШОТЫ (РЕДАКТИРОВАТЬ):
На первом снимке экрана показано, что 10 ^ 5 работает с текущей настройкой, а 10 ^ 6 - нет. У меня нет скриншота для 10 ^ 6, работающего на моей последней машине, но я использовал его много раз.
EDIT:
Программа работала бы нормально, если бы я объявил массив как global или создал его динамически в куче как
int* a = new int[MAX];
Но что я не понимаю, так это то, что когда локальный массив занимает в стеке скудные 3,5 МБ памяти (и нормально работал на машине с 2 ГБ), почему эта проблема возникает на машине с 4 ГБ? Это проблема стека пользователя? Можно ли его увеличить вручную?
РЕДАКТИРОВАТЬ 2:
Я особенно задаю этот вопрос, потому что я представил множество решений для SPOJ с массивами размером 10 ^ 6, созданными в стеке. С моей текущей настройкой я чувствую себя неполноценным, неспособным сделать это. Я предпочитаю стек поверх кучи, когда это возможно, потому что у него нет проблем с утечкой памяти; и локальные переменные над глобальными переменными, потому что они аккуратны и не портят пространство имен.