gpt4 book ai didi

C++ 垃圾回收和循环引用数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:28 25 4
gpt4 key购买 nike

我目前正在使用引用计数技术实现我的垃圾收集器(在 C++ 中)。但是,有一个主要问题是,如果数据被循环引用,则永远不会收集它们,因为它们的引用计数始终不为零。

我试着四处搜索,发现了这些叫做跟踪垃圾收集器、标记清除算法等的东西。我可以实现一个吗?它们究竟是如何工作的?

最佳答案

这是垃圾收集器设计中的一个经典问题。看看 Garbage Collection article on Wikipedia ,它很好地展示了垃圾收集器设计中的不同权衡。三色标记等“更进化”的算法实际上非常简单,易于实现。我已经使用这些指令为我自己的 C Lisp 实现实现了一个跟踪收集器。

跟踪垃圾收集器要处理的最复杂的事情是遍历对象树(例如查找对“事件”对象的引用)。如果您正在为另一种语言编写解释器,这并不太难,因为您可以在根对象类(或所有对象的其他公分母)中为此连接设施。但是,如果您在 C++ 中为 C++ 编写垃圾收集器,那么您将很难做到这一点,因为您需要检查对象内容以找到指向其他已分配内存区域的指针。

如果您出于教育目的编写垃圾收集器,我建议您考虑为另一种语言(无法直接访问指针的语言)编写解释器。如果您正在用 C++ 编写 C++ 收集器并打算在生产软件中使用它,我强烈建议您使用 an existing production-quality implementation相反。

关于C++ 垃圾回收和循环引用数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8564993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com