Middle+
Hogyan osztódik a memória a Golang-ban? Mi jön a heap-ből és mi a stack-ből?
sobes.tech MI
Válasz az MI-től
В Go память выделяется автоматически, но концептуально есть стек и куча.
- Стек используется для локальных переменных функций и параметров. Он быстро выделяется и освобождается при вызове и возврате из функции.
- Куча используется для объектов, которые должны жить дольше времени вызова функции, например, если переменная возвращается из функции или её адрес сохраняется вне функции.
Go компилятор и сборщик мусора сами решают, где разместить переменную (escape analysis). Если переменная "убегает" из стека (например, её адрес передаётся наружу), она размещается в куче.
Пример:
func foo() *int {
x := 10 // локальная переменная
return &x // x "убегает" в кучу
}
func main() {
p := foo() // p указывает на кучу
fmt.Println(*p)
}
Здесь x будет размещён в куче, потому что его адрес возвращается из функции.