Что это значит, что уменьшение указателя стека резервирует место в стеке?

Что именно означает "резерв" в этом контексте и как уменьшение указателя стека резервирует место в стеке? Есть ли у регулировки регистра указателя стека побочный эффект?

"Резервирование места" звучит как распределение памяти, но память для стека обычно фиксируется и выделяется заранее, поэтому я не думаю, что это означает.

Я думаю, это просто означает, что мы говорим кому-то другому не использовать наше пространство стека и что кто-то еще просто читает регистр указателя стека и по соглашению знает, что он не должен сгладить что-либо выше этого. Если это правильно, то кто этот кто-то еще? Последующие вызовы функций? ОС?

1 ответ

Решение

Просто тот факт, что указатель стека теперь немного ниже, зарезервировал пространство. Функции, вызываемые рекурсивно и т. Д. (Будем надеяться) будут уважать резервирование, не записывая в зарезервированную память таким образом (на самом деле их ничто не останавливает, но если они это делают, то они ломаются).

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

Это тип распределения, это распределение в буфере фиксированного размера, но так же, как и все, в конечном итоге вы можете выделить только столько памяти, несмотря ни на что. Это просто более ограничено.

Другие вопросы по тегам