Sobes.tech
Back to questions
Middle
1

Как изменяется емкость слайса при его расширении?

Companies where asked
VKVK

Answer from AI

sobes.tech AI

В Go слайс — это структура, которая содержит указатель на массив, длину и емкость. При добавлении элементов с помощью append, если длина слайса достигает его текущей емкости, происходит перераспределение памяти: создаётся новый массив с увеличенной емкостью, и данные копируются в него.

Правила изменения емкости не строго фиксированы, но обычно:

  • При небольших слайсах (до 1024 элементов) емкость удваивается.
  • При больших слайсах прирост становится более консервативным (около 25% от текущей емкости).

Это позволяет балансировать между частотой аллокаций и использованием памяти.

Пример:

s := make([]int, 0, 2) // длина 0, емкость 2
s = append(s, 1)        // длина 1, емкость 2
s = append(s, 2)        // длина 2, емкость 2
s = append(s, 3)        // длина 3, емкость увеличивается, например, до 4

Таким образом, емкость слайса растёт экспоненциально при расширении, что оптимизирует производительность добавления элементов.