Sobes.tech
Back to questions
Senior
2

Можно ли оптимизировать так, чтобы массив res был на стеке, а не на куче? Что для этого нужно сделать?

Companies where asked
А7

Answer from AI

sobes.tech AI

В Go массивы, объявленные локально в функции, обычно размещаются на стеке, если компилятор может гарантировать, что они не выйдут за пределы области видимости функции. Чтобы массив res был на стеке, нужно:

  • Объявить массив с фиксированным размером локально, например var res [N]int.
  • Избегать передачи указателей на этот массив за пределы функции (чтобы не было escape analysis).

Если компилятор определит, что массив «утекает» (escape analysis), он выделит его в куче. Поэтому важно, чтобы массив не возвращался из функции и не сохранялся в глобальных переменных.

Пример:

func example() {
    var res [100]int // массив на стеке
    // работа с res
}

Если же использовать срезы с динамическим размером, то underlying array обычно выделяется в куче.