Как растет стек

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

Ответ

Стек в Go растет динамически, начиная с небольшого размера (обычно 2 КБ). При нехватке места выделяется новый стек большего размера, содержимое копируется, а указатели обновляются. Это позволяет избежать переполнения, но может вызывать паузы из-за копирования.

Пример:

func recursive(n int) {
    if n == 0 { return }
    recursive(n-1)
}

Вызов recursive(1000000) не приведет к stack overflow, но может быть неэффективным. В отличие от кучи, стек управляется runtime и освобождается автоматически при выходе из функции.