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