Назад к вопросам
Senior
4
В чём разница между heap и stack в Go и как используется каждый?
Компании, где спрашивали
Займиго
Ответ от нейросети
sobes.tech AI
В Go стек (stack) и куча (heap) используются для управления памятью, но служат разным целям.
-
Stack (стек):
- Хранит локальные переменные функций и параметры.
- Быстро выделяется и освобождается при вызове и возврате из функций.
- Размер стека ограничен, обычно небольшой.
- Переменные на стеке живут только в рамках функции.
-
Heap (куча):
- Используется для динамического выделения памяти, когда переменная должна жить дольше, чем вызов функции.
- Go runtime и сборщик мусора управляют кучей.
- Переменные, на которые есть ссылки вне текущей функции, размещаются в куче.
Пример:
func foo() *int {
x := 10 // локальная переменная
return &x // x будет размещён в куче, чтобы указатель оставался валиден
}
func main() {
p := foo()
fmt.Println(*p) // 10
}
Здесь переменная x из foo попадёт в кучу, потому что её адрес возвращается и используется вне функции.