获取C++标记清除垃圾收集器的根节点

3

我的目标是使用C++语言创建简单的标记-清除垃圾收集器。标记阶段的第一步是获取所有根(线程堆栈、全局变量...)。那么,我该如何在我的C++代码中获取或查找这些根?


1
你可能需要编写一个编译器来收集这些信息。 - Richard Critten
1
请看Boehm保守式垃圾收集器,这是一种可能的方法:https://en.wikipedia.org/wiki/Boehm_garbage_collector - Thomas Padron-McCarthy
你可以尝试调用一个函数来注册每个根对象,并让你的收集器保持一个列表。虽然不是很方便,但比起编写新的编译器来说容易实现,对于某些情况仍然有用。或者看看这个链接:https://dev59.com/FXVC5IYBdhLWcg3w51vy?rq=1 - Thomas Padron-McCarthy
是的,我看到了Boehm收集器。我会再试一次……是否有可能(我的意思是更容易实现)用C编写的C++收集器呢? 编辑:我不确定我是否要编写一个新的编译器。如果有最简单的解决方案,我正在寻找这个工作部分的最简单解决方案。 - branishko
一个精确的垃圾收集器需要了解对象和堆栈帧布局。而保守型的垃圾收集器只需扫描内存区域(堆栈、堆)以查找指向这些区域的潜在指针。 - the8472
1
https://github.com/hsutter/gcpp - Guillaume Racicot
1个回答

4

Herb Sutter在2016年的CPPCon上发表了一场演讲,详细解释了如何在C++中正确地实现标记-清除垃圾收集器:演讲视频


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接