Back to questions
Aston
Senior
5
Что такое escape-анализ? Как он определяет, где будет размещена переменная (стек или куча)?
Companies where asked
Answer from AI
sobes.tech AI
Escape-анализ в Go — это процесс компилятора, который определяет, где должна храниться переменная: в стеке или в куче. Если переменная "убегает" из области видимости функции (например, её адрес возвращается или сохраняется вне функции), она размещается в куче, чтобы оставаться доступной после завершения функции.
Как работает:
- Компилятор анализирует использование переменной.
- Если переменная используется только внутри функции и не передаётся наружу, она размещается в стеке (быстрее, автоматически очищается).
- Если переменная "убегает" (escape), например, её адрес сохраняется в глобальной переменной или возвращается из функции, она выделяется в куче.
Пример:
func f() *int {
x := 10
return &x // x "убегает" из функции, будет в куче
}
func g() {
y := 20 // y не убегает, будет в стеке
fmt.Println(y)
}