Middle+
Jak se v Golangu přiděluje paměť? Co pochází z haldy a co ze zásobníku?
sobes.tech AI
Odpověď od AI
В Go память выделяется автоматически, но концептуально есть стек и куча.
- Стек используется для локальных переменных функций и параметров. Он быстро выделяется и освобождается при вызове и возврате из функции.
- Куча используется для объектов, которые должны жить дольше времени вызова функции, например, если переменная возвращается из функции или её адрес сохраняется вне функции.
Go компилятор и сборщик мусора сами решают, где разместить переменную (escape analysis). Если переменная "убегает" из стека (например, её адрес передаётся наружу), она размещается в куче.
Пример:
func foo() *int {
x := 10 // локальная переменная
return &x // x "убегает" в кучу
}
func main() {
p := foo() // p указывает на кучу
fmt.Println(*p)
}
Здесь x будет размещён в куче, потому что его адрес возвращается из функции.