Как увеличить выделение памяти до программы

Когда я пытаюсь инициализировать 3D массив размера 300*300*4 в программе C, моя программа прекращает работать и сообщает об ошибке переполнения стека. Система, которую я использую, имеет 3 ГБ RAM, которая должна быть достаточной. Там какой-либо путь состоит в том, чтобы увеличить память, выделенную программе? Я использую C++ Dev на Windows Vista.

5
задан Justin Johnson 12 June 2010 в 08:53
поделиться

4 ответа

Даже если у вас 3 ГБ ОЗУ, размер стека ограничен ОС и, как правило, невелик, поскольку такие большие структуры, скорее всего, размещаются в куче, а не в стеке.

Поскольку вы используете C ++, может быть, вы могли бы использовать Boost ?

boost::multi_array<int, 3> x (boost::extents[300][300][4]);
2
ответ дан 18 December 2019 в 09:05
поделиться

Вам необходимо увеличить объем стека, который может использовать ваша программа.

Вы можете установить максимальный размер стека в диалоговом окне свойств в "Linker | System | Stack Reserve Size"

3
ответ дан 18 December 2019 в 09:05
поделиться

Либо используйте malloc () / free () (или new [] / delete [] для C ++), или глобальный массив, или локальный статический массив. Если вы попытаетесь создать нестатический массив внутри функции, он будет выделен в стеке, и стеки, как правило, не очень большие.

Вы также можете попробовать инициализировать массив в обратном направлении; некоторые ОС увеличивают стек динамически по мере возникновения ошибок страниц, и, поскольку на x86 размер стека увеличивается численно вниз, может помочь обратная инициализация.

11
ответ дан 18 December 2019 в 09:05
поделиться

Поскольку вы используете DevC ++, по-видимому, вы используете компилятор gcc, а через него - компоновщик ld. У компоновщика есть опция -stack stacksize , которая позволяет вам контролировать объем памяти, выделяемой стеку. Я не знаю, как вы это сделаете на DevC ++.

Я также не знаю, зачем кому-то вообще использовать DevC ++ - он содержит ошибки и больше не разрабатывается. Вам следует подумать о переходе на лучшую IDE - Code :: Blocks только что выпустил новый основной выпуск, превосходит DevC ++ во всех отношениях и поставляется с гораздо более современным компилятором C ++.

2
ответ дан 18 December 2019 в 09:05
поделиться