Sobes.tech
Назад к вопросам
Senior
6

Что происходит когда capacity слайса исчерпана и добавляется ещё элемент?

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

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

sobes.tech AI

Когда capacity слайса исчерпана и добавляется новый элемент через append, происходит следующее:

  1. Создаётся новый массив с увеличенной capacity. Обычно capacity увеличивается примерно в 2 раза, но точный алгоритм зависит от реализации и размера слайса.

  2. Содержимое старого массива копируется в новый.

  3. Новый элемент добавляется в новый массив.

  4. Слайс начинает ссылаться на новый массив с обновлённой длиной и capacity.

Это означает, что операция append при исчерпании capacity приводит к выделению новой памяти и копированию данных, что может быть дорогостоящей. Поэтому, если заранее известен размер, лучше создавать слайс с нужной capacity через make.

Пример:

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