【问题标题】:Getting roots for Mark Sweep Garbage Collector C++获取 Mark Sweep 垃圾收集器 C++ 的根源
【发布时间】:2017-06-02 14:47:15
【问题描述】:

我的目标是用 C++ 语言创建简单的标记清除垃圾收集器。标记阶段的第一步是获取所有根(线程堆栈、全局变量...)。那么,我怎样才能在我的 c++ 代码中获取或找到它的根源呢?

【问题讨论】:

  • 您可能需要编写一个编译器来收集这些信息。
  • 查看 Boehm 保守收集器的一种可能方法:en.wikipedia.org/wiki/Boehm_garbage_collector
  • 您可以做的一个可能的事情是调用一个函数来注册每个根对象,并让您的收集器保留一个列表。不太方便,但易于实现(与编写新编译器相比),并且在某些情况下仍然有用。或者看看这个:stackoverflow.com/questions/147130/…
  • 是的,我看到了 Boehm 收藏家。我会再试一次...是否有可能(我的意思是更容易实现)用于 C++ 的收集器,但用 C 编写?编辑:不确定我会写一个新的编译器。我正在为这部分工作寻找最简单的解决方案,如果有的话。

标签: c++ garbage-collection garbage


【解决方案1】:

Herb Sutter 在CPPCon 2016 发表的演讲准确地解释了如何在 C++ 中正确地创建一个标记-n-扫描垃圾收集器:Talk

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多