Проверяет понимание моделей памяти и аллокации в Go.
Стек — быстрый LIFO-пулл памяти для локальных переменных функций, освобождаемый при выходе из функции. Куча — более медленное, но гибкое хранилище для объектов с динамическим временем жизни, управляемое сборщиком мусора. Go компилятор решает, что аллоцировать на стеке, а что — в куче, через escape-анализ.
Стек:
Малый размер, автоматическое управление.
Быстрая аллокация/деаллокация (движение указателя).
Переменные живут до конца функции.
Куча:
Большой объём, управление GC.
Аллокация через runtime, освобождение при сборке мусора.
Объекты могут жить дольше, чем функция, их используют указатели и shared-data.
Escape-анализ:
Компилятор поднимает переменные на куча, если они «убегают» из стека.
Вывод:
Локальные не-escape встают на стек, разделяемые и возвращаемые по указателю — в куче.