> Как происходит выделение памяти для переменных в функции double в Go (Go)

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

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

Стек: Go

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

В Go выделение памяти для переменных внутри функции double (или любой другой) определяется анализом escape-анализа (escape analysis) на этапе компиляции. Если переменная не "убегает" за пределы функции (то есть на неё нет ссылок вне функции, и она не возвращается), память выделяется на стеке - это быстро и автоматически освобождается при выходе из функции. Если же переменная "убегает" (например, возвращается указатель на локальную переменную, или она передаётся в горутину, или присваивается полю структуры, которая живёт дольше), компилятор выделяет память в куче (heap). В куче память управляется сборщиком мусора (GC), что медленнее, но необходимо для долгоживущих данных.

Пример:

GO
func double(x int) *int {
result := x * 2
return &result // result "убегает" - выделение в куче
}

Если же функция просто возвращает значение:

GO
func double(x int) int {
result := x * 2
return result // result не убегает - выделение на стеке
}

Таким образом, решение о выделении памяти принимает компилятор, а не программист, что минимизирует накладные расходы.

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

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