Что происходит с размером стека по ходу выполнения программы

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

Ответ

Размер стека в Go фиксирован для каждой горутины и по умолчанию составляет 2 КБ (может меняться в зависимости от версии Go и ОС). При вызове функций стек растёт, при возврате из функций — уменьшается. Если стек переполняется, Go автоматически выделяет новый стек большего размера и копирует туда данные. Это называется "stack growing".

Пример:

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

func main() {
    recursive(10000) // Будет несколько расширений стека
}