Когда происходит аллокация памяти в стеке?

«Когда происходит аллокация памяти в стеке?» — вопрос из категории Управление памятью, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Ключевые моменты:

  • Когда: В момент создания локальной переменной или при вызове функции (под аргументы и служебную информацию).
  • Как: Путем простого сдвига указателя стека (очень быстро).
  • Особенности: Размер стека ограничен (обычно 1-8 МБ на поток). Память имеет автоматическое время жизни (LIFO).

Пример на C:

void myFunction(int x) { // При вызове: в стеке аллоцируется место для `x` и адреса возврата
    int localVar = 42;   // В этот момент в стеке аллоцируется место для `localVar`
    // ... использование переменных
} // При выходе из функции: вся память этого стекового фрейма освобождается

Практическое следствие: Нельзя возвращать указатель/ссылку на локальную переменную, так как после выхода из функции её память будет переиспользована.