Какие типы памяти существуют и как они взаимодействуют между собой?

В Go (Golang) основные типы памяти и их взаимодействие следующие:

Короткий ответ

Что ответить на собеседовании

В Go (Golang) основные типы памяти и их взаимодействие следующие:

Подробный разбор

Ответ с пояснениями

В Go (Golang) основные типы памяти и их взаимодействие следующие:

  • Стек (Stack) — хранит локальные переменные функций. Стек быстро выделяется и освобождается при вызове и возврате из функций.
  • Куча (Heap) — используется для динамического выделения памяти, например, для объектов, которые живут дольше текущей функции. Go имеет сборщик мусора, который управляет очисткой кучи.
  • Глобальная/статическая память — для глобальных переменных и констант.

Взаимодействие:

  • При вызове функции локальные переменные размещаются в стеке.
  • Если переменная должна жить дольше, компилятор может «переместить» её в кучу (escape analysis).
  • Сборщик мусора автоматически освобождает память в куче, когда объекты становятся недостижимыми.

Пример:

func foo() *int {
    x := 10
    return &x // x "убежит" в кучу, так как возвращается указатель
}

Здесь переменная x будет размещена в куче, чтобы указатель оставался валидным после выхода из функции.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее