Есть ли функция для установки стека процессов / выделения кучи памяти? - PullRequest
1 голос
/ 20 июня 2010

Я знаю, что это функция ОС.Но есть ли способ увеличить общий размер стека или кучи с помощью C?sbrk () используется для изменения размера сегмента данных, верно?Означает ли это как стек, так и кучу?

Ответы [ 2 ]

3 голосов
/ 20 июня 2010

Вы упомянули sbrk () , поэтому я предполагаю, что вы имеете в виду Unix / Linux. sbrk () изменит размер сегмента данных, но обычно стек находится в другом пространстве памяти, чем сегмент данных, чтобы люди не перезаписывали стек и не совершали злых дел. Обычно вы устанавливаете размер стека перед запуском программы, используя ulimit из вашей оболочки.

Примечание: sbrk () устарела в пользу malloc () .

Спецификация Open Unix определяет (и реализует Linux) функции getrlimit () и setrlimit () , которые также позволяют вам играть с системными ограничениями.

1 голос
/ 20 июня 2010

Операционные системы виртуальной памяти (при использовании ЦП с MMU) автоматически увеличивают сегмент данных / стека при необходимости до максимума.В системах POSIX максимумы могут быть настроены с помощью setrlimit (), как сказал W. Craig Trader.POSIX определяет RLIMIT_DATA, RLIMIT_STACK и RLIMIT_AS для ограничений.

malloc () внутренне использует brk () для увеличения / уменьшения сегмента данных или mmap () / munmap () для запроса / освобождения отображений памяти.Стек увеличивается, когда процессор пытается получить доступ к памяти ниже выделенного стека.

В системах без MMU (например, uClinux) формат исполняемого файла обычно имеет поле для размера стека (посмотрите наНапример, формат файла BFLT).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...