垃圾收集库

时间:2010-07-01 06:55:16

标签: c garbage-collection

垃圾收集是否有“好”的C库?

我知道Boehm GC,它现在是否保留?

http://tinygc.sourceforge.net怎么办?

您对这些图书馆有什么经验?

2 个答案:

答案 0 :(得分:3)

您可以使用Boehm's Garbage Collector。我合作过的很多项目都使用它。

答案 1 :(得分:0)

虽然我不知道C的一个好的,简单的,有效的GC,但我想谈谈一些想法。

多年来,由于担心内存泄漏,我避免了堆分配。如果没有从堆中分配,我不知道有任何内存泄漏的方法。

但是我不知道从函数(例如字符串或结构数组)返回内存的更好方法,而不是堆分配。堆分配允许您精确分配所需的内存量,而无需知道编译时需要多少内存。如果你的程序将文件加载到内存,你可能不会在编译时知道你可能需要多少内存。如果你去静态内存路由,那么你总是需要分配你可能需要的最大内存。然后你的程序可以在不需要的时候成为记忆猪。堆更好。

但是在某些类型的程序中,跟踪堆分配可能很困难,例如,一个程序有许多模块从内存数据库中插入和删除元素。内存泄漏可能很难解决。一个好的GC在我看来是一个非常好的方法来阻止内存泄漏,因为自动跟踪和释放堆分配。

因此,这篇文章回应了评论“如果你在C中使用malloc()和free()有问题,你应该切换到另一种语言。”如果编程问题很复杂并且解决方案需要堆分配,那么即使是最好的程序员也必须调试内存泄漏。

在某些程序中,可能有使用垃圾收集的替代方法:您可以假设操作系统将在程序终止时释放所有程序的分配。因此,您的主程序可能能够调用第二个使用堆分配的程序,然后将结果写入文件并终止。我在Windows上测试了这个。我观察到Windows释放了我的测试程序在测试程序终止时分配的堆内存。我多次运行测试程序。可用内存没有减少。

当然,让第二个程序运行一段时间并终止通常不是一个可行的解决方案。