Sobes.tech
Middle

Как расте капацитетът на слайса при разширяване?

sobes.tech AI

Отговор от AI

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

Например, ако слайсът има 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 се увеличава приблизително двойно при необходимост.