Sobes.tech
Назад к вопросам
Senior
3

Как определить, где будет располагаться переменная — на куче или на стеке? Что такое escape analysis и как он работает?

Компании, где спрашивали
А7

Ответ от нейросети

sobes.tech AI

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

Escape analysis — это процесс компилятора, который определяет, какие переменные могут быть размещены на стеке (быстрее, с автоматическим освобождением) и какие должны быть выделены в куче (с управлением временем жизни через сборщик мусора).

Пример:

func foo() *int {
    x := 10 // x может "убежать"
    return &x // возвращаем адрес x, значит x должен быть в куче
}

func bar() {
    y := 20 // y не убегает за пределы bar
    fmt.Println(y) // y может быть на стеке
}

В первом случае переменная x будет размещена в куче, во втором — y на стеке.