Senior
¿Qué es el análisis de escape? ¿Cómo determina dónde se colocará la variable (en la pila o en el montón)?
sobes.tech AI
Respuesta de la IA
Escape-анализ в Go — это процесс компилятора, который определяет, где должна храниться переменная: в стеке или в куче. Если переменная "убегает" из области видимости функции (например, её адрес возвращается или сохраняется вне функции), она размещается в куче, чтобы оставаться доступной после завершения функции.
Как работает:
- Компилятор анализирует использование переменной.
- Если переменная используется только внутри функции и не передаётся наружу, она размещается в стеке (быстрее, автоматически очищается).
- Если переменная "убегает" (escape), например, её адрес сохраняется в глобальной переменной или возвращается из функции, она выделяется в куче.
Пример:
func f() *int {
x := 10
return &x // x "убегает" из функции, будет в куче
}
func g() {
y := 20 // y не убегает, будет в стеке
fmt.Println(y)
}