关于c中的内存管理有什么好的方案?

2012-07-14 09:16:29 +08:00
 mlzboy
关于c中的内存管理有什么好的方案,初学了一段时间的c,开始写点东西,发现对malloc,free,这块不容易撑控,有没有自动能管理malloc,free的lib,或是别的方法 ,求指点
3117 次点击
所在节点    问与答
5 条回复
nino789pzw
2012-07-14 10:37:35 +08:00
有各种lib的 但是自己做memory management更合适更灵活吧
Ricepig
2012-07-14 10:42:32 +08:00
找一个为c编写的GC库?
ssword
2012-07-14 11:06:29 +08:00
手工管理内存的好处是可以精确地控制内存,但好处也仅止于此了。使用GC虽然会消耗相当一部分额外的内存,但可以让人生更快乐许多。

C/C++的话boehm GC可以用,保守式的垃圾收集,malloc()来的内存就不需要人肉释放了 http://www.hpl.hp.com/personal/Hans_Boehm/gc/

不过C/C++的GC有个坑,那就是我们的程序有了GC很不错,但是我们用的三方库是没有GC的,照样需要小心地管理这些资源。

要自己管理内存,纯粹的人肉free()依然也是不靠谱的。

C++的方案是通过RAII,将对象的生存周期与变量的生存周期保持一致;
linux内核中通用的方案是给结构体留一个refcount字段做引用计数;
nginx是弄一个内存池,处理一个http请求中用到的所有内存都来自于这个内存池,待处理完毕就一股脑把它释放掉;
cocoa是内存池+引用计数,在一股脑的释放内存池时,如果一个对象还有被引用,那么就不释放它。这一来通过内存池可以负责释放临时对象,而常驻于内存的对象,则通过引用计数来管理。
haohaolee
2012-07-14 11:48:23 +08:00
果断用C++呗,支持C的编译器8成也支持C++
xpfd
2012-07-14 13:06:51 +08:00
嵌入式表示从来不考虑GC问题,所有资源都是静态数组

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/42328

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX