Можно ли узнать, куда сохранена переменная, в стек или кучу

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

Ответ

В Go компилятор сам решает, где хранить переменную (стек/куча) на основе escape-анализа. Разработчику обычно не нужно об этом заботиться.

Как проверить?
Используйте go build -gcflags="-m", чтобы увидеть решения компилятора:

package main

func main() {
    x := 42       // Обычно в стеке
    y := new(int) // Может уйти в кучу
    *y = 100
    _ = x
    _ = y
}

Вывод -gcflags="-m" покажет, "escapes to heap" для переменных, которые компилятор решил разместить в куче.

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