手工管理内存的好处是可以精确地控制内存,但好处也仅止于此了。使用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是内存池+引用计数,在一股脑的释放内存池时,如果一个对象还有被引用,那么就不释放它。这一来通过内存池可以负责释放临时对象,而常驻于内存的对象,则通过引用计数来管理。