🔴 Сложный · 3 очк. Разное / продвинутое
Где будет размещена переменная: func f() *int { x := 42; return &x }?
A На стеке
B В куче (heap)
C В регистре CPU
D На стеке с копированием при return
Объяснение вопроса

Переменная x будет размещена в куче (heap), потому что её адрес возвращается из функции и переживает вызов.

Escape analysis

Компилятор Go выполняет анализ побега (escape analysis): если на переменную ссылаются после выхода из функции, она не может жить на стеке и аллоцируется в куче. Здесь &x возвращается - значит, x уходит в кучу.

func f() *int {
    x := 42
    return &x  // x "убегает" в кучу
}
// Проверка: go build -gcflags="-m"  покажет "moved to heap"

Зачем это важно

Аллокации в куче создают работу для GC. В горячем пути часто стараются не возвращать указатели на локальные переменные или не хранить их в глобальных структурах, чтобы данные оставались на стеке.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.