Sobes.tech
Back to questions
Senior
5

Что такое escape-анализ? Как он определяет, где будет размещена переменная (стек или куча)?

Companies where asked
AstonAston

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)
}