Back to questions
МВидео
Middle+
4
Как в Golang выделяется память? Что из кучи, а что из стека?
Companies where asked
Answer from AI
sobes.tech AI
В Go память выделяется автоматически, но концептуально есть стек и куча.
- Стек используется для локальных переменных функций и параметров. Он быстро выделяется и освобождается при вызове и возврате из функции.
- Куча используется для объектов, которые должны жить дольше времени вызова функции, например, если переменная возвращается из функции или её адрес сохраняется вне функции.
Go компилятор и сборщик мусора сами решают, где разместить переменную (escape analysis). Если переменная "убегает" из стека (например, её адрес передаётся наружу), она размещается в куче.
Пример:
func foo() *int {
x := 10 // локальная переменная
return &x // x "убегает" в кучу
}
func main() {
p := foo() // p указывает на кучу
fmt.Println(*p)
}
Здесь x будет размещён в куче, потому что его адрес возвращается из функции.