Sobes.tech
Назад к вопросам
Middle
3

Как растёт capacity слайса при расширении?

Компании, где спрашивали
VKVK

Ответ от нейросети

sobes.tech AI

В Go слайс имеет внутреннюю ёмкость (capacity), которая растёт при расширении. Когда добавляется элемент и текущая ёмкость недостаточна, слайс выделяет новый массив с увеличенной ёмкостью, обычно примерно в 2 раза больше текущей, чтобы минимизировать количество аллокаций.

Например, если у слайса capacity=4, при добавлении пятого элемента создаётся новый массив с capacity=8, и данные копируются туда. Это амортизированное увеличение позволяет эффективно управлять памятью и производительностью.

Пример:

s := make([]int, 0, 4)
for i := 0; i < 10; i++ {
    s = append(s, i)
    fmt.Printf("len=%d cap=%d\n", len(s), cap(s))
}

Вывод покажет, как capacity увеличивается примерно вдвое при необходимости.