Виртуальная память процесса - пространство между стеком и кучей - PullRequest
1 голос
/ 05 марта 2012

Что происходит, когда неиспользуемое пространство памяти между стеком и кучей в виртуальной памяти процесса исчерпано?

1 Ответ

1 голос
/ 08 марта 2012

В Windows есть защитная страница между стеком и кучей, поэтому куча и стек никогда не касаются. Это делается из соображений безопасности (поэтому ошибка исчерпания стека не может привести к более уязвимой ошибке переполнения кучи).

Если вы спрашиваете, что происходит, когда куча заполняется, простой ответ заключается в том, что ваши вызовы malloc (или HeapAlloc или что-то еще) начнут возвращать NULL. Если вы спрашиваете, что происходит, когда стек заполняется, вы получаете исключение исчерпания стека (иногда ошибочно называемое переполнением стека). В любом случае это обычно приводит к тому, что программа освобождает память и продолжает работу или выходит на рабочий стол.

...