Как определяется объем памяти для процесса? - PullRequest
4 голосов
/ 18 июня 2011

Насколько я понимаю, когда процесс выполняется, у него есть некоторое количество памяти.Когда размер стека увеличивается, он создается с одного конца процесса (без учета глобальных переменных, стоящих перед стеком), а куча - с другого конца.Если вы продолжите добавлять в стек или кучу, в конечном итоге вся память будет использована для этого процесса.

Как определяется объем памяти, предоставленный процессу?Я могу только предположить, что это зависит от множества различных переменных, но отклик как можно более общий был бы хорош.Если что-то должно стать конкретным, меня интересуют процессы Linux, написанные на C ++.

Ответы [ 2 ]

2 голосов
/ 20 июня 2011

На большинстве платформ Linux работает с включенной виртуальной памятью.Это означает, что каждый процесс имеет свое собственное виртуальное адресное пространство, размер которого определяется только аппаратным обеспечением и тем, как его настроило ядро.

Например, в архитектуре x86 с "3/1"разделенная конфигурация, каждый процесс пользовательского пространства имеет 3 ГБ доступного адресного пространства, в котором выделяются куча и стек.Это не зависит от того, сколько физической памяти доступно в системе.В архитектуре x86-64 для каждого процесса пользовательского пространства обычно доступно 128 ТБ адресного пространства.

Физическая память выделяется отдельно для этой виртуальной памяти.Объем этого процесса зависит от конфигурации системы, но в целом он просто предоставляется «по требованию» - в основном ограничен объемом физической памяти и файлового пространства подкачки, а также объемом, используемым в настоящее время для других целей..

0 голосов
/ 18 июня 2011

Стек магически не растет.Его размер статичен, а размер определяется во время компоновки.Поэтому, когда вы берете достаточно места из стека, он переполняется (переполнение стека;)

С другой стороны, область кучи «магически» увеличивается.Это означает, что, когда для кучи требуется все больше памяти, программа запрашивает у операционной системы больше памяти.

РЕДАКТИРОВАТЬ: Как указал Мэт ниже, стек фактически может увеличиваться во время выполнения в современных операционных системах.

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