> Где в памяти живут глобальные переменные в 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)? Нет, они не в куче и не в стеке. Они находятся в статической памяти, выделенной на этапе загрузки программы, и живут на протяжении всего времени выполнения приложения. Это отличает их от локальных переменных (стек) и динамически выделенных объектов (куча).
Пример:
GOvar globalA = 100 // .datavar globalB int // .bss
При этом Go runtime может оптимизировать размещение, если переменная не используется (dead code elimination), но в общем случае глобальные переменные остаются в статической области памяти до завершения программы.
> Похожие задачи по backend
Как используется WaitGroup для ожидания завершения горутин в Go
Когда происходит копирование элементов при передаче массива или слайса в функцию в Go
Какую функцию выполняет транзакция
Для чего используется профилирование pprof в Go
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью