mlzboy
V2EX  ›  问与答

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

  •  
  •   mlzboy · Jul 14, 2012 · 3890 views
    This topic created in 5093 days ago, the information mentioned may be changed or developed.
    关于c中的内存管理有什么好的方案,初学了一段时间的c,开始写点东西,发现对malloc,free,这块不容易撑控,有没有自动能管理malloc,free的lib,或是别的方法 ,求指点
    5 replies    1970-01-01 08:00:00 +08:00
    nino789pzw
        1
    nino789pzw  
       Jul 14, 2012
    有各种lib的 但是自己做memory management更合适更灵活吧
    Ricepig
        2
    Ricepig  
       Jul 14, 2012
    找一个为c编写的GC库?
    ssword
        3
    ssword  
       Jul 14, 2012
    手工管理内存的好处是可以精确地控制内存,但好处也仅止于此了。使用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  
       Jul 14, 2012
    果断用C++呗,支持C的编译器8成也支持C++
    xpfd
        5
    xpfd  
       Jul 14, 2012
    嵌入式表示从来不考虑GC问题,所有资源都是静态数组
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3174 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 77ms · UTC 12:32 · PVG 20:32 · LAX 05:32 · JFK 08:32
    ♥ Do have faith in what you're doing.