Найти тему

050 Выделение памяти в слайсе

В Go вы можете увеличить длину фрагмента при добавлении новых элементов с помощью встроенной функции append().

Вот пример:

Go Playground - The Go Programming Language

В этом примере мы создаем фрагмент s с длиной 3 и емкостью 5 с помощью функции make. Затем мы добавляем два элемента к срезу с помощью функции append. Поскольку вместимость среза равна 5, его размер пока не нужно изменять. Затем мы добавляем к срезу еще три элемента. Поскольку емкость среза превышена, его размер автоматически изменяется до новой емкости 10, а существующие элементы копируются в новый базовый массив.

При добавлении элементов в срез среда выполнения Go выделяет память, используя стратегию динамического роста. Стратегия роста зависит от конкретной реализации, но обычно среда выполнения Go удваивает емкость базового массива при добавлении нового элемента в срез, который достиг своей текущей емкости.

Например, если емкость фрагмента равна 8 и добавляется новый элемент, среда выполнения Go создаст новый базовый массив размером 16, скопирует существующие элементы в новый массив и добавит новый элемент в конец фрагмента. Старый базовый массив будет удален, если на него больше не будет ссылок.