Ответ
Массив в Go аллоцируется в стеке, если его размер известен на этапе компиляции и не превышает разумных пределов. Для больших массивов или массивов с динамическим размером (срезы) память выделяется в куче (heap).
Пример:
func stackArray() {
var arr [10]int // аллоцируется в стеке
}
func heapArray() {
arr := make([]int, 1000) // аллоцируется в куче
}
Критерии размещения:
- Массивы фиксированного размера обычно в стеке
- Срезы (динамические массивы) всегда в куче
- Большие массивы (>10KB) могут быть перемещены в кучу
Компилятор Go принимает решение об аллокации на основе escape-анализа.