【发布时间】:2017-02-20 23:45:40
【问题描述】:
我的主要问题是:如何编写一个简单易懂的 C 垃圾收集算法?我正在尝试学习 C(还不是 C++)并编写自己的 C 垃圾收集算法,但我遇到了问题。我如何知道我的结构何时准备好被释放?我如何知道结构返回后何时准备好在函数内部释放?我应该使用带或不带指针的结构吗?我发现这篇文章说垃圾收集很容易: https://cboard.cprogramming.com/c-programming/94327-garbage-collection-not-so-complicated.html
我想知道“动态对象存储在带有类型标记和标记位的联合中”以及“对对象使用双重间接”是什么意思?这真的是一个简单的方法吗?如何用 C 代码编写?
提前致谢
【问题讨论】:
-
通过阅读链接,它说它“没那么复杂”,这可能与“它很容易”完全不同。如果你对你的任务没有任何限制,我会认为你的任务“足够复杂” - 最后。
-
好吧,我会继续努力学习 C。Objective-C 让 ARC 看起来如此简单。
-
gc 本身并不复杂。但是选择正确的方法,实现适合您需求的算法,设计界面以及如何集成到应用程序代码中等等,都需要相当多的经验。恕我直言:从你的问题来看,我怀疑你至少有后者。热情往往不足以进行编程。您首先可能想从不那么复杂的东西开始。
-
关于 ARC,它看起来很简单,因为 Apple 的团队努力让它看起来像这样。 Apple 的文档将其描述为编译器功能,这意味着其他 Objective-C 库实现(例如 GNUstep)需要类似的编译器支持,包括识别新的生命周期限定符(例如,需要在 GCC/Clang 和/或 Binutils 上工作)。 ARC 使用该编译器支持来确定在何处自动插入保留/释放周期。否则,ARC 是不可能的,因为没有可靠的方法来自动知道何时不再使用对象。
标签: c garbage-collection