Понимание работы стека вызовов функций

Логический стек растёт как a1 → a2 → a3, затем раскручивается в обратном порядке. В глубочайшей точке активны y, z и x своих вызовов.

Короткий ответ

Что ответить на собеседовании

Логический стек растёт как a1 → a2 → a3, затем раскручивается в обратном порядке. В глубочайшей точке активны y, z и x своих вызовов.

Подробный разбор

Ответ с пояснениями

Условие

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

func a3(){
    let x = 5
}
func a1(){
    let y = 5
    a2()
}
func a2(){
    let z = 3
    a3()
}
a1()

Определите, как меняется стек от начала выполнения a1() до полного завершения всех функций.

Ответ

Логический стек растёт как a1 → a2 → a3, затем раскручивается в обратном порядке. В глубочайшей точке активны y, z и x своих вызовов.

После входа в a1 появляется его кадр и локальное y = 5. Вызов a2 добавляет кадр с z = 3, затем a3 — с x = 5. При возврате из a3 исчезает его кадр, затем завершается a2 и наконец a1. Это модель исполнения, а не обещание конкретной физической раскладки: оптимизатор может удалить неиспользуемые переменные и вызовы либо выполнить inlining. Для отладочного разбора важно различать область видимости и фактическое хранение значения.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее