Вопрос

я пытаюсь создать массив: int HR [32487834]; Разве это не занимает около 128 - 130 мегабайт памяти? Я использую MS C ++ Visual Studio 2005 с пакетом обновления 1 (SP1), и он дает сбой и сообщает мне о переполнении стека.

Это было полезно?

Решение

Хотя на вашем компьютере может быть гигабайт памяти, в стеке его нет (по умолчанию я думаю, что в Windows это ~ 1 МБ, но вы можете увеличить его).

Попробуйте выделить его в куче с помощью new [] .

Другие советы

Используйте вектор - данные массива будут располагаться в куче, в то время как вы по-прежнему будете автоматически очищать массив при выходе из функции или блока:

std::vector<int> HR( 32487834);

Стек по умолчанию не такой большой. Вы можете установить размер стека с помощью / F переключателя компилятора .

  

Без этой опции размер стека   по умолчанию 1 МБ. Числовой аргумент   может быть в десятичном или C-языке   нотации. Аргумент может варьироваться от   От 1 до максимального принятого размера стека   по компоновщику. Линкер округляется   указанное значение с точностью до 4   байт. Пробел между / F и числом   не является обязательным.

Вы также можете использовать параметр компоновщика STACK для исполняемых файлов

Но, скорее всего, вам следует разбивать свою проблему на части, а не делать все сразу. Тебе действительно нужна вся эта память одновременно?

Обычно вы можете выделить больше памяти в куче, чем в стеке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top