c ++ вопрос выделения памяти - PullRequest
1 голос
/ 01 августа 2009

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

Ответы [ 3 ]

11 голосов
/ 01 августа 2009

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

std::vector<int> HR( 32487834);
7 голосов
/ 01 августа 2009

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

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

3 голосов
/ 01 августа 2009

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

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

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

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

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

...