> В чем различия между стеком и хипом в Go (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Т-Банк

Стек: Go

> Пример ответа

В Go стек и хип - это области памяти с разным управлением и временем жизни.

Стек - это область памяти, выделяемая каждому горутине (goroutine). Он работает по принципу LIFO (Last In, First Out) и используется для хранения локальных переменных, параметров функций и адресов возврата. Память на стеке выделяется и освобождается автоматически при входе и выходе из функции. Это очень быстро, так как не требует сборки мусора. Размер стека в Go изначально мал (несколько килобайт), но может динамически расти при необходимости.

Хип - это общая область памяти, используемая для данных, которые должны жить дольше, чем функция, в которой они созданы. Память на хипе выделяется явно (например, через new или make) или неявно, когда компилятор решает, что переменная «убегает» (escape) в хип. Освобождение памяти на хипе происходит через сборщик мусора (GC), что медленнее и может вызывать задержки.

Ключевые различия:

  • Скорость: стек - быстрый, хип - медленнее из-за GC.

  • Управление: стек - автоматическое, хип - сборка мусора.

  • Размер: стек ограничен (но динамический), хип - практически неограничен (до RAM).

  • Область видимости: стек - локальная для горутины, хип - глобальная (доступен из разных горутин, но с осторожностью).

Пример: если вы создаете структуру внутри функции и возвращаете указатель на неё, Go переместит её в хип (escape analysis). Если же структура не используется вне функции, она останется на стеке.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью