Работал ли с Heap

«Работал ли с Heap» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, работал. В Go куча (heap) используется для хранения объектов, на которые ссылаются указатели или если их размер неизвестен на этапе компиляции. Объекты в куче управляются сборщиком мусора (GC).

Пример с аллокацией в куче:

func createHeapObject() *int {
    x := 42 // x escapes to heap
    return &x
}

В этом случае x будет размещен в куче, так как его ссылка возвращается из функции. Можно анализировать escape-анализу с помощью go build -gcflags="-m".

Для ручной работы с кучей (например, при оптимизации) можно использовать:

  • runtime.ReadMemStats для мониторинга
  • Профилирование с pprof для анализа аллокаций
  • Пулы объектов (sync.Pool) для уменьшения нагрузки на GC