Получение корней для сборщика мусора Mark Sweep C++

Моя цель — создать простой сборщик мусора с маркировкой на языке C++. Первым шагом на этапе маркировки является получение всех корней (стеки потоков, глобальные переменные...). Итак, как я могу получить или найти эти корни в моем коде на С++?


person branishko    schedule 18.01.2017    source источник
comment
Вероятно, вам потребуется написать компилятор, который собирает эту информацию.   -  person Richard Critten    schedule 18.01.2017
comment
Один из возможных подходов можно найти в консервативном сборщике Boehm: en.wikipedia.org/wiki/Boehm_garbage_collector.   -  person Thomas Padron-McCarthy    schedule 18.01.2017
comment
Одна возможная вещь, которую вы могли бы сделать, это вызвать функцию для регистрации каждого корневого объекта и позволить вашему сборщику вести список. Не очень удобно, но легко реализуемо (по сравнению с написанием нового компилятора) и все же может быть полезно в некоторых случаях. Или посмотрите на это: stackoverflow.com/questions/147130/   -  person Thomas Padron-McCarthy    schedule 18.01.2017
comment
Да, я видел коллекционера Бёма. Я попробую еще раз... Возможен ли (имеется в виду проще в реализации) сборщик для C++, но написанный на C? Изменить: не уверен, что напишу новый компилятор. Я ищу самое простое решение для этой части работы, если оно есть.   -  person branishko    schedule 18.01.2017
comment
точный сборщик должен знать расположение объекта и кадра стека. консервативный может просто сканировать области памяти (стеки, куча) на наличие потенциальных указателей на эти области.   -  person the8472    schedule 18.01.2017
comment
github.com/hsutter/gcpp   -  person Guillaume Racicot    schedule 18.01.2017


Ответы (1)


На CPPCon 2016 выступил Херб Саттер. сборщик на C++: Обсуждение

person Martin Rozkin    schedule 19.01.2017