Материалы книги получены с http://www.itlibitum.ru/
Перебор внутри периметра
После того как вы определите периметр одним из перечисленных выше способов, возникает
следующая задача - пройтись по всем объектам внутри периметра. И снова существуют два основных варианта: анализ объекта или интерпретация всех значений как потенциальных указателей.
Анализ объекта
Программу можно видоизменить, чтобы в перебор включались только указатели внутри каждого объекта. При этом можно использовать решение с виртуальными функциями, объектами классов или даже заставить умные указатели организовать перебор указателей в тех объектах, на которые они ссылаются. В любом случае вам придется основательно потрудиться над модификацией кода ваших классов.
Силовое решение
Второй вариант - просканировать весь логический размер каждого помеченного объекта в поисках потенциальных адресов объектов. Мы делаем то же самое, что делалось раньше для стека, и сталкиваемся со знакомой проблемой имитации указателей - раздражающей, но безвредной. Каждый раз, когда будет найдено значение, соответствующее адресу некоторого объекта, этот объект помечается и включается в рекурсию.
Внешние объекты
При управлении несколькими пространствами памяти можно встретить объекты, находящиеся не в главном пространстве, в котором происходит сборка мусора, а в другом пространстве по вашему выбору. Тот факт, что объект является внешним, не снимает с вас ответственности - он вполне может ссылаться обратно, в управляемое пространство. Если это пространство не было рассчитано на эффективный перебор указателей (то есть не имеет заголовков объектов), дальше выкручивайтесь сами.
Назад Содержание Далее
|