Что такое Side table (Боковая таблица)?

Похожий вопрос редко встречается на собеседованиях, но это не значит, что тему стоит оставлять неизученной. Разберем понятие Боковая таблица или Side Table.

Вкратце, Side Table — механизм, с помощью которого реализуются слабые ссылки. Не каждый объект содержит слабые ссылки, следовательно, и боковые таблицы, иначе это было бы расточительно. Вместо того чтобы напрямую указывать на объект, слабая ссылка указывает на боковую таблицу, которая, в свою очередь указывает на объект.

Такое поведение решает две проблемы:

  • Экономия памяти, поскольку память объекта освобождается.
  • Наличие безопасного обнуления слабой ссылки.

Боковая таблица — счетчик ссылок + указатель на объект и отображается в Swift Runtime следующим образом:

class HeapObjectSideTableEntry {
  std::atomic<HeapObject*> object;
  SideTableRefCounts refCounts;
  // Операции по увеличению и уменьшению счетчиков ссылок
}

В текущем алгоритме в боковой таблице хранятся счетчики ссылок. Как только мы начинаем ссылаться на объект слабой ссылкой (weak), то создается боковая таблица и объект хранит ссылку на боковую таблицу. Сама боковая таблица также имеет ссылку на объект.

Больше информации:

Выразить благодарность или найти уникальный материал вы можете в boosty.

Подписывайтесь на мой Telegram-канал iOS Interview Channel, чтобы не пропустить новый материал.


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *