Sobes.tech
Назад к вопросам
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 попадёт в кучу, потому что её адрес возвращается и используется вне функции.