Что вам даст перестановка указателя при сборке мусора?

Я чувствую, что упускаю что-то до боли простое, но я пытаюсь понять сборку мусора пометки и очистки в соответствии с книгой Эндрю Аппеля «Современная реализация компилятора в ML», и в разделе «Пометка и очистка» есть небольшой абзац под названием «Повторение указателя» (270).

На данный момент я думаю, что понимаю, как это работает. Короче говоря, когда вы проходите по графику, вы переворачиваете все указатели так, чтобы ваш предшественник оказался внутри вашего набора полей. Затем, когда вы закончите с данным элементом, вы перевернете указатели обратно, чтобы они снова указывали на нужное место.

Если это так, что именно это вам покупает? Аппель пытается объяснить это, но я не совсем понимаю его формулировку.

См. также:  Как правильно выполнить приведение для сравнения указателя с явным диапазоном адресов?
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. yarian

    При маркировке объекты делятся на три категории:

    1. Объекты, которые не были отмечены
    2. Объекты, которые были отмечены, но могут указывать на немаркированные объекты
    3. Объекты, которые были отмечены и указывают только на отмеченные объекты

    По мере выполнения маркировки объекты изменяют состояние с категории 1 на категорию 2 и с категории 2 на категорию 3. Сборщик мусора должен отслеживать все объекты категории 2, чтобы он мог найти все неотмеченные объекты. Но где он хранит эту информацию? Сборка мусора может выполняться, когда память полностью заполнена, поэтому она не может динамически выделять структуру данных. Он должен построить структуру данных, содержащую объекты категории 2, используя уже выделенную память. Обращение указателя — это алгоритм построения связанного списка этих объектов без выделения памяти.

    О, теперь я понимаю, что вы имеете в виду. Таким образом, это способ получить функциональность, подобную стеку, когда у вас недостаточно памяти для фактического выделения стека. Это на самом деле довольно умно (как это всегда бывает). Небольшая проблема, но вы имеете в виду на этапе маркировки, верно? Подметание — это то, что следует после? person yarian; 23.04.2012

    Интересно отметить, что некоторые схемы сборки мусора используют дескрипторы (косвенные указатели), но .net использует прямые указатели; когда объект перемещается, каждая ссылка на этот объект должна быть обновлена, чтобы указывать на новый адрес. Я бы предположил, что именно поэтому объекты должны быть достаточно большими, чтобы содержать три ссылки на объекты, даже если есть только две ссылки на объекты: когда объект перемещается, первые 12/24 байта памяти, которые ранее использовались старый объект можно использовать в качестве блокнота для процесса GC. Это звучит правильно? person yarian; 25.04.2012

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

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: