Назад к вопросам
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 на стеке.