我想知道我是否可以看到 C 或 C++ 中的垃圾收集器是如何工作的?
选择内存中未使用的值的算法是什么?
谁能告诉我 GC 在 C 中是如何工作的?
C 和 C++ 没有垃圾收集。
请查看本文/文章:Hans Boehm的 C 和 C++ 垃圾收集器
尽管标准 C 和 C++ 中不支持垃圾收集,但至少有一种流行且非常便携的实现,称为Boehm-Demers-Weiser 保守垃圾收集器。
保守的垃圾收集器通过假设所有看起来像指针的东西都是一个指针来工作,即使它实际上是一个整数。因此,它们有时可能无法回收未引用的对象。此外,诸如异或指针之类的技巧可以隐藏指针。但根据我的经验,它们在实践中似乎运作良好。
在 C 中,垃圾收集完全是手动的;您需要跟踪分配给malloc()
或相关功能的任何内容,以便free()
在完成后释放它,而这永远不会自动完成。
C++ 大体相同;你需要delete
分配的任何东西new
(以及delete[]
分配的任何数组new[]
)。然而,这个过程可以(并且应该)通过创建管理动态资源的对象并在其析构函数中释放它们来部分自动化。这种技术通常被称为RAII,最常见的例子是标准库中的容器和智能指针。
两种语言都没有自动垃圾收集,也没有任何方法来确定是否正在使用任何动态对象;您总是需要自己管理动态资源。有一些非标准的扩展来提供垃圾收集,但我对它们一无所知。