Ответ
Память в стеке аллоцируется при входе в область видимости (например, при вызове функции или в начале блока кода) и освобождается автоматически при выходе из этой области.
Ключевые моменты:
- Когда: В момент создания локальной переменной или при вызове функции (под аргументы и служебную информацию).
- Как: Путем простого сдвига указателя стека (очень быстро).
- Особенности: Размер стека ограничен (обычно 1-8 МБ на поток). Память имеет автоматическое время жизни (LIFO).
Пример на C:
void myFunction(int x) { // При вызове: в стеке аллоцируется место для `x` и адреса возврата
int localVar = 42; // В этот момент в стеке аллоцируется место для `localVar`
// ... использование переменных
} // При выходе из функции: вся память этого стекового фрейма освобождается
Практическое следствие: Нельзя возвращать указатель/ссылку на локальную переменную, так как после выхода из функции её память будет переиспользована.