-
Как увеличить максимальную память, выделенную для стека/кучи для программы на С++?
-
Увеличивает ли оперативная память вашего компьютера автоматическое увеличение памяти стека/кучи компьютерной программы?
Как увеличить максимальную память, выделенную на стек/кучу
Ответ 1
В Visual С++ вы можете использовать директиву #pragma
. Например:
#pragma comment(linker, "/STACK:2000000")
#pragma comment(linker, "/HEAP:2000000")
Ответ 2
Второе редактирование: я вижу из вашего комментария, что вы работаете в Windows, поэтому мой ответ Unix ниже не будет очень полезен для вас. Но см. Определение пространства стека с помощью Visual Studio и максимальный размер стека для C/С++.
Размер stack довольно ограничен в Linux. Команда ulimit -s даст текущее значение в килобайтах. Вы можете изменить значение по умолчанию (обычно) в файле /etc/security/limits.conf.
Вы также можете, в зависимости от привилегий, изменить его на основе каждого процесса с помощью setrlimit()
. См. Например мой ответ в Ошибка сегментации: выделение стека в программе на языке C в Ubuntu, когда bufffer > 4M.
Для кучи см., например, ограничение размера кучи в C. Но я не думаю, что вы можете увеличить или уменьшить максимальный размер.
Ответ 3
Вы можете указать размер зарезервированной кучи и размер стека с параметрами link/Heap и /Stack в Visual Studio. Подробнее см. В следующих статьях MSDN:
Ответ 4
Размер кучи процесса обычно ограничен максимальной памятью, которую может выделить процесс. Куча не должна быть смежной (если вы не делаете что-то вроде malloc (1000000000)), поэтому куча может использовать большую часть доступного адресного пространства.
В Windows максимальный размер процесса зависит от нескольких факторов.
Используя 32-разрядную Windows, 32-разрядный процесс может по умолчанию выделять 2 ГБ. Если Windows загружается с помощью переключателя /3GB, и процесс компилируется с использованием флага компоновщика "Разрешить большие адреса", тогда процесс может выделить 3 ГБ.
Используя 64-битную Windows, 32-разрядный процесс по умолчанию может выделять 2 ГБ. Если процесс связан с "Разрешить большие адреса", то 64-разрядная версия Windows позволяет 32-битовому процессу выделять 4 ГБ.
64-разрядный процесс (в 64-разрядной Windows) может выделить примерно 16 000 ГБ.
Ответ 5
У меня возникла проблема с памятью с размером кучи по умолчанию и размером в 1 МБ. Но когда я устанавливаю свойства выше 2 МБ (2000000), он отлично работает.
Чтобы установить эти свойства в среде разработки Visual Studio, выполните следующие действия.
- Откройте диалоговое окно "Страницы свойств проекта".
- Щелкните папку Linker.
- Перейдите на страницу свойств системы.
- Изменить
Heap Reserve Size
иStack Reserve Size
.