Ответ
Массив в Swift (Array<Element>) — это структура (value type), которая хранит элементы в непрерывном (contiguous) блоке памяти.
Ключевые особенности внутреннего устройства:
- Динамический буфер: Выделяет память с запасом (
capacity). При добавлении элементов, если места не хватает, происходит реаллокация с увеличением размера буфера (обычно в 2 раза). - Copy-on-Write (CoW): Для оптимизации несколько переменных могут ссылаться на один буфер. Реальное копирование происходит только при модификации одной из них.
- Производительность:
- Доступ по индексу: O(1) (прямая адресация).
- Добавление в конец (амортизированно): O(1).
- Вставка/удаление в середину: O(n) (требуется сдвиг элементов).
Пример, демонстрирующий capacity:
var numbers = [1, 2, 3]
print(numbers.capacity) // Например, 3
numbers.append(4) // Может вызвать реаллокацию
print(numbers.capacity) // Например, 6
Специализированный тип: ContiguousArray гарантирует хранение в непрерывной памяти без мостового преобразования, что может повысить производительность для непримитивных типов.