> Где в памяти живут глобальные переменные в Go? (Go)

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

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

Стек: Go

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

Глобальные переменные в Go размещаются в сегменте данных (data segment) процесса, который делится на две основные части: инициализированные данные (initialized data segment) и неинициализированные данные (BSS - Block Started by Symbol). Конкретное расположение зависит от того, инициализирована ли переменная значением или нет.

  • Инициализированные глобальные переменные (например, var x int = 42) попадают в секцию .data. Они имеют фиксированное значение на этапе компиляции и загружаются в память при старте программы.

  • Неинициализированные глобальные переменные (например, var y int) попадают в секцию .bss. Они не занимают места в образе исполняемого файла, но резервируют память при запуске, которая заполняется нулями.

Важно: в Go глобальные переменные всегда размещаются в куче (heap) или стеке (stack)? Нет, они не в куче и не в стеке. Они находятся в статической памяти, выделенной на этапе загрузки программы, и живут на протяжении всего времени выполнения приложения. Это отличает их от локальных переменных (стек) и динамически выделенных объектов (куча).

Пример:

GO
var globalA = 100 // .data
var globalB int // .bss

При этом Go runtime может оптимизировать размещение, если переменная не используется (dead code elimination), но в общем случае глобальные переменные остаются в статической области памяти до завершения программы.

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

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