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

Как в Golang выделяется память? Что из кучи, а что из стека?

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

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

sobes.tech AI

В Go память выделяется автоматически, но концептуально есть стек и куча.

  • Стек используется для локальных переменных функций и параметров. Он быстро выделяется и освобождается при вызове и возврате из функции.
  • Куча используется для объектов, которые должны жить дольше времени вызова функции, например, если переменная возвращается из функции или её адрес сохраняется вне функции.

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

Пример:

func foo() *int {
    x := 10 // локальная переменная
    return &x // x "убегает" в кучу
}

func main() {
    p := foo() // p указывает на кучу
    fmt.Println(*p)
}

Здесь x будет размещён в куче, потому что его адрес возвращается из функции.