c ++ вопрос выделения памяти
-
07-07-2019 - |
Вопрос
я пытаюсь создать массив:
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 для исполняемых файлов Но, скорее всего, вам следует разбивать свою проблему на части, а не делать все сразу. Тебе действительно нужна вся эта память одновременно? Обычно вы можете выделить больше памяти в куче, чем в стеке. Р>