C语言中的轻松垃圾收集

C语言中的轻松垃圾收集,c,garbage-collection,C,Garbage Collection,我的主要问题是:如何编写一个简单易懂的C垃圾收集算法?我正在尝试学习C(不是C++),并编写自己的C垃圾收集算法,但我遇到了一些问题。我如何知道何时可以释放我的结构?我如何知道结构在返回后何时准备在函数内部释放?我应该使用带指针还是不带指针的结构?我发现这篇文章说垃圾收集很容易: 我想知道“动态对象存储在带有类型标记和标记位的并集中”是什么意思,以及“对对象使用双重间接寻址”是什么意思?这真的是一个简单的方法吗?如何用C代码编写这个 提前感谢进行垃圾收集的超级简单的方法是以某种方式记录对mal

我的主要问题是:如何编写一个简单易懂的C垃圾收集算法?我正在尝试学习C(不是C++),并编写自己的C垃圾收集算法,但我遇到了一些问题。我如何知道何时可以释放我的结构?我如何知道结构在返回后何时准备在函数内部释放?我应该使用带指针还是不带指针的结构?我发现这篇文章说垃圾收集很容易:

我想知道“动态对象存储在带有类型标记和标记位的并集中”是什么意思,以及“对对象使用双重间接寻址”是什么意思?这真的是一个简单的方法吗?如何用C代码编写这个


提前感谢

进行垃圾收集的超级简单的方法是以某种方式记录对malloc位置的引用数量。当该计数器达到0时,则释放()该内存位置


也就是说,在C中进行垃圾收集可能没有C那么有意义,因为在C中,除了“收集”之外,你没有对象和其他结构,因此你必须更直接地管理你的内存。

只需阅读链接,它说“没有那么复杂”,这可能与“很简单”有很大不同。如果你对你的任务没有任何限制,我会认为你的任务“足够复杂”。最后,我将继续学习C。Objtovi-C使它看起来很容易。ARC本身并不复杂。但是选择正确的方法、实现算法以满足您的需要、设计接口以及如何集成到应用程序代码中等等,都需要相当多的经验。恕我直言:从你的问题来看,我怀疑你至少有后者。对编程来说,热情往往是不够的。首先,你可能想从一些不那么复杂的东西开始。关于ARC,它看起来很简单,因为苹果的团队投入了工作,使它看起来像那样。苹果的文档将其描述为一种编译器功能,这意味着其他Objective-C库实现,如GNUstep,将需要类似的编译器支持,包括识别新的生命周期限定符(例如,必须使用GCC/Clang和/或Binutils)。ARC使用编译器支持来确定自动插入保留/释放周期的位置。否则,ARC是不可能的,因为没有可靠的方法自动知道对象何时不再使用。这个问题已经不适合堆栈溢出。在C中使用gc有很好的理由。否则Python的C引用实现将如何工作?gc不绑定到OOP,您也可以在C中执行OOP。我认为,在C中使用它有很多原因,我没有说它是无效的。但是,如果问题涉及到C++ vs C,我就在质疑它的需求。这在很大程度上取决于你在做什么。我看不到任何东西支持你的说法——这是“C与C++”。而你在答案中所写的内容甚至不完全是关于C++的,你实际上说“GC在C中没有什么意义”。我想我已经明确了为什么这个问题不应该回答。仅供参考:我已经为大型C(和一个组装)项目实施了各种地面军事系统,否则这些项目会更加复杂(并且不支持现在的功能)。