🟡 Средний · 2 очк. Go runtime
Что определяет escape analysis в Go?
A Нужно ли использовать defer
B Где выделить память: на стеке или в куче
C Оптимальный размер горутины
D Нужен ли GC для переменной
Объяснение вопроса

Escape analysis - анализ компилятора, который решает, можно ли переменную разместить на стеке или она должна жить в куче ("убегает" из функции). Если указатель на переменную возвращается или сохраняется в глобальном/куче - переменная размещается в куче.

func getPtr() *int {
    x := 42  // x "убегает" - возвращается указатель
    return &x
}

func noEscape() int {
    x := 42
    return x  // x на стеке
}

Как посмотреть решения компилятора

go build -gcflags="-m" . 2>&1 | grep escape
// output: ... moved to heap: x

Размещение в куче увеличивает нагрузку на GC. Иногда можно переписать код так, чтобы данные оставались на стеке (например, не возвращать указатель на локальную переменную).

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