Sobes.tech
Back to questions
Senior
7

Что изменится, если передать начальную capacity при создании слайса?

Companies where asked
plata

Answer from AI

sobes.tech AI

При создании слайса в Go с указанием начальной capacity (ёмкости) вы заранее выделяете память под определённое количество элементов, хотя длина слайса остаётся нулевой (если явно не указана длина).

Это влияет на производительность и поведение слайса:

  • Избегаете частых аллокаций: При добавлении элементов в слайс, если capacity недостаточна, происходит выделение нового массива с увеличенным размером и копирование данных. Задав capacity заранее, вы уменьшаете количество таких операций.

  • Оптимизация памяти: Вы контролируете, сколько памяти выделяется сразу, что полезно, если заранее известно примерное количество элементов.

Пример:

s := make([]int, 0, 100) // длина 0, capacity 100

for i := 0; i < 50; i++ {
    s = append(s, i)
}
// Здесь не будет перераспределения памяти, так как capacity достаточна

Без указания capacity слайс будет расширяться динамически, что может привести к дополнительным затратам на копирование.