Что такое стек вызовов

«Что такое стек вызовов» — вопрос из категории Golang, который задают на 24% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Стек вызовов (call stack) — это структура данных, которая хранит информацию о вызовах функций в программе. Работает по принципу LIFO (Last In, First Out): последняя вызванная функция обрабатывается первой.

При вызове функции в стек помещается её контекст (аргументы, локальные переменные, адрес возврата). Когда функция завершается, её контекст удаляется из стека.

Пример в Go:

func main() {
    a()
}

func a() {
    b()
}

func b() {
    println("Hello from b")
}

Стек при выполнении:

  1. main()
  2. main()a()
  3. main()a()b()
  4. После завершения b() стек уменьшается

Если стек переполняется (например, при бесконечной рекурсии), происходит stack overflow. В Go размер стека по умолчанию ~1MB на горутину.