Подтвердить что ты не робот

Как увеличить максимальную память, выделенную на стек/кучу

  • Как увеличить максимальную память, выделенную для стека/кучи для программы на С++?

  • Увеличивает ли оперативная память вашего компьютера автоматическое увеличение памяти стека/кучи компьютерной программы?

4b9b3361

Ответ 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. Но я не думаю, что вы можете увеличить или уменьшить максимальный размер.

Ответ 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.