我只是想了解更多关于当前流行的垃圾收集, malloc / free 和计数器的信息。
根据我的理解, GC 是最受欢迎的,因为它减轻了开发人员手动管理内存的负担,而且更具弹性。 malloc / free 容易出错并导致内存泄漏。
来自http://ocaml.org/learn/tutorials/garbage_collection.html:
为什么垃圾收集比显式内存分配更快 如在C?人们常常认为免费收取费用。事实上 免费是一项昂贵的操作,涉及导航 内存分配器使用的复杂数据结构。如果你的程序 间歇性地调用,然后需要所有代码和数据 加载到缓存中,替换每个程序代码和数据 你释放单个内存分配的时间。一种收集策略 一次释放多个内存区域(例如池分配器) 或者GC)只为多次分配支付这一罚款一次(因此 每次分配的成本大大降低了。)
GC 是否比 malloc / free 更快?
此外,如果计数器样式的内存管理( objective-c 正在使用它)加入聚会怎么办?
我希望有人可以通过更深入的见解来总结比较。
答案 0 :(得分:2)
GC是否比malloc / free更快?
可以。这取决于内存使用模式。这还取决于你如何测量"更快"。 (例如,您是在测量整体内存管理效率,单独调用malloc / free,还是......暂停时间。)
但相反,malloc / free通常比现代复制GC更好地利用内存...前提是您不会遇到堆碎片问题。并且malloc / free"工作"当编程语言没有提供足够的信息以允许GC将堆指针与其他值区分开来时。
另外,如果计数器式内存管理(objective-c正在使用它)加入派对怎么办?
引用计数的开销使指针赋值更加昂贵,并且您必须以某种方式处理引用循环。
另一方面,引用计数确实提供了一种控制内存管理暂停的方法......这可能是交互式游戏/应用程序的一个重要问题。内存使用率也更好;见上文。
FWIW,您引用的来源中提出的观点是正确的。但这不是全局。
问题是整个图片太复杂了,无法在StackOverflow答案中正确覆盖。
答案 1 :(得分:0)