> Как происходит выделение памяти для переменных в функции double в Go (Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: Т-Банк
Стек: Go
> Пример ответа
В Go выделение памяти для переменных внутри функции double (или любой другой) определяется анализом escape-анализа (escape analysis) на этапе компиляции. Если переменная не "убегает" за пределы функции (то есть на неё нет ссылок вне функции, и она не возвращается), память выделяется на стеке - это быстро и автоматически освобождается при выходе из функции. Если же переменная "убегает" (например, возвращается указатель на локальную переменную, или она передаётся в горутину, или присваивается полю структуры, которая живёт дольше), компилятор выделяет память в куче (heap). В куче память управляется сборщиком мусора (GC), что медленнее, но необходимо для долгоживущих данных.
Пример:
GOfunc double(x int) *int {result := x * 2return &result // result "убегает" - выделение в куче}
Если же функция просто возвращает значение:
GOfunc double(x int) int {result := x * 2return result // result не убегает - выделение на стеке}
Таким образом, решение о выделении памяти принимает компилятор, а не программист, что минимизирует накладные расходы.
> Похожие задачи по backend
С каким стеком Go библиотек знаком
Оценка знаний по Go
Как написать запрос с использованием CTE в SQL
Как работает использование нескольких CTE с JOIN в SQL: по индексам или в памяти?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью