关于c中的内存管理有什么好的方案? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mlzboy
V2EX    问与答

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

  •  
  •   mlzboy 2012-07-14 09:16:29 +08:00 3524 次点击
    这是一个创建于 4836 天前的主题,其中的信息可能已经有所发展或是发生改变。
    关于c中的内存管理有什么好的方案,初学了一段时间的c,开始写点东西,发现对malloc,free,这块不容易撑控,有没有自动能管理malloc,free的lib,或是别的方法 ,求指点
    5 条回复    1970-01-01 08:00:00 +08:00
    nino789pzw
        1
    nino789pzw  
       2012-07-14 10:37:35 +08:00
    有各种lib的 但是自己做memory management更合适更灵活吧
    Ricepig
        2
    Ricepig  
       2012-07-14 10:42:32 +08:00
    找一个为c编写的GC库?
    ssword
        3
    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
        4
    haohaolee  
       2012-07-14 11:48:23 +08:00
    果断用C++呗,支持C的编译器8成也支持C++
    xpfd
        5
    xpfd  
       2012-07-14 13:06:51 +08:00
    嵌入式表示从来不考虑GC问题,所有资源都是静态数组
    关于     帮助文档     自助推广系统     博客     API     < href="/faq" class="dark" target="_self">FAQ     Solana     5653 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 03:09 PVG 11:09 LAX 20:09 JFK 23:09
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86