Когда я пытаюсь инициализировать 3D массив размера 300*300*4 в программе C, моя программа прекращает работать и сообщает об ошибке переполнения стека. Система, которую я использую, имеет 3 ГБ RAM, которая должна быть достаточной. Там какой-либо путь состоит в том, чтобы увеличить память, выделенную программе? Я использую C++ Dev на Windows Vista.
Даже если у вас 3 ГБ ОЗУ, размер стека ограничен ОС и, как правило, невелик, поскольку такие большие структуры, скорее всего, размещаются в куче, а не в стеке.
Поскольку вы используете C ++, может быть, вы могли бы использовать Boost ?
boost::multi_array<int, 3> x (boost::extents[300][300][4]);
Вам необходимо увеличить объем стека, который может использовать ваша программа.
Вы можете установить максимальный размер стека в диалоговом окне свойств в "Linker | System | Stack Reserve Size"
Либо используйте malloc ()
/ free ()
(или new []
/ delete []
для C ++), или глобальный массив, или локальный статический массив. Если вы попытаетесь создать нестатический массив внутри функции, он будет выделен в стеке, и стеки, как правило, не очень большие.
Вы также можете попробовать инициализировать массив в обратном направлении; некоторые ОС увеличивают стек динамически по мере возникновения ошибок страниц, и, поскольку на x86 размер стека увеличивается численно вниз, может помочь обратная инициализация.
Поскольку вы используете DevC ++, по-видимому, вы используете компилятор gcc, а через него - компоновщик ld. У компоновщика есть опция -stack stacksize
, которая позволяет вам контролировать объем памяти, выделяемой стеку. Я не знаю, как вы это сделаете на DevC ++.
Я также не знаю, зачем кому-то вообще использовать DevC ++ - он содержит ошибки и больше не разрабатывается. Вам следует подумать о переходе на лучшую IDE - Code :: Blocks только что выпустил новый основной выпуск, превосходит DevC ++ во всех отношениях и поставляется с гораздо более современным компилятором C ++.