Проверяет понимание, какие типы и при каких условиях аллоцируются в heap.
В куче оказываются объекты, помеченные escape-анализом: указатели, структуры, которые возвращаются наружу, элементы мап и срезов при append, объекты, хранящиеся в глобальных переменных или каналах. Простые локальные переменные без escape остаются на стеке.
Escape-объекты:
Возвращаемые по указателю структуры.
Срезы/map передаваемые наружу.
Глобальные:
Любые переменные пакета.
append к срезам:
Когда capacity исчерпана и аллоцируется новый массив в heap.
Каналы:
make(chan T, n) аллоцирует внутренние буферы в heap.
Пример:
func f() *int {
x := 5 // escape → heap
return &x
}