Анализ компилятора, определяющий где аллоцировать переменную: на стеке или в куче. Если переменная не «убегает» из функции — стек (дешёво, автоматическая очистка). Если убегает (возвращается, передаётся по указателю, сохраняется в интерфейс) — куча (дороже, нагружает GC).
Посмотреть решения компилятора:
go build -gcflags="-m" ./...
# ./main.go:10: moved to heap: x
Типичные причины escape: возврат указателя на локальную переменную, присвоение интерфейсу, замыкания, слишком большие объекты. Зная это, можно оптимизировать hot path — избегать лишних аллокаций на хипе.