Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : array, memory allocation, capacity, amortized

Как работает выделение памяти при добавлении элементов в Array?

Вопрос оценивает знание механизма динамических массивов Swift и стратегии роста внутреннего буфера.

Короткий ответ

При первом добавлении создаётся буфер минимального размера. Если в буфере не хватает места, Swift выделяет новый буфер с увеличенной ёмкостью (обычно в 2 раза больше), копирует старые элементы и освобождает старый. Это обеспечивает амортизированное время вставки O(1).

Длинный ответ

Внутренний буфер:

  • Array хранит элементы в выделенной области памяти (buffer).

  • Имеет текущую ёмкость (capacity) и количество элементов (count).

Добавление элемента:

  • Если count < capacity, элемент просто записывается.

  • Если count == capacity, требуется расширение:

    • Выделяется новый буфер (обычно capacity * 2).

    • Старые элементы копируются в новый буфер.

    • Старый буфер освобождается.

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

Амортизированная сложность:

  • Хотя расширение дорогое (O(n)), происходит редко.

  • В среднем время вставки — константное O(1).

Пример:

var a: [Int] = []
for i in 1...100 {
    	a.append(i) // иногда будет выделяться новый буфер
}

Вывод:
Механизм удвоения ёмкости позволяет сочетать быстрые добавления и экономное использование памяти.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    5

Навыки

  • Swift

    Swift

Ключевые слова

#array

#memory allocation

#capacity

#amortized

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.