Где аллоцируется массив

«Где аллоцируется массив» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Массив в Go аллоцируется в стеке, если его размер известен на этапе компиляции и не превышает разумных пределов. Для больших массивов или массивов с динамическим размером (срезы) память выделяется в куче (heap).

Пример:

func stackArray() {
    var arr [10]int // аллоцируется в стеке
}

func heapArray() {
    arr := make([]int, 1000) // аллоцируется в куче
}

Критерии размещения:

  1. Массивы фиксированного размера обычно в стеке
  2. Срезы (динамические массивы) всегда в куче
  3. Большие массивы (>10KB) могут быть перемещены в кучу

Компилятор Go принимает решение об аллокации на основе escape-анализа.