2017-01-18 5 views
3

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

+1

Вы, вероятно, нужно написать компилятор, который собирает эту информацию. –

+0

Посмотрите на консервативный коллектор Бем для одного возможного подхода: https://en.wikipedia.org/wiki/Boehm_garbage_collector –

+0

. Одна из возможных вещей, которую вы можете сделать, - вызвать функцию для регистрации каждого корневого объекта и позволить вашему коллекционеру сохранить список. Не очень удобно, но легко реализовать (по сравнению с написанием нового компилятора), и все же может быть полезным для некоторых случаев. Или посмотрите на это: http://stackoverflow.com/questions/147130/why-doesnt-c-have-a-garbage-collector?rq=1 –

ответ

3

Существует разговор, что Herb Sutter дал на CPPCon 2016 что точно объясняет, как правильно сделать знак-н-стреловидности сборщик мусора в C++: Talk

Смежные вопросы