cocos2dx 内存管理机制

本文详细介绍了cocos2dx的内存管理机制,主要基于计数引用实现。内存管理包括通过autorelease自动回收池释放未使用对象和通过节点管理确保对象在弃用后及时删除。文章讨论了计数引用、标记清除法和复制收集法等垃圾回收机制,并阐述了cocos2dx中autorelease的实现过程及其对性能的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cocos2dx 内存管理机制

垃圾回收(GC)

在内存中不在使用的或者没有指针再指向的内存空间称为“垃圾”,将这些垃圾收集起来再次利用的机制称为垃圾回收机制。垃圾占用的内存需要及时地释放,否则就会引起「内存泄露」。有些语言需要程序员来手动释放内存、回收垃圾,有些语言有垃圾回收机制(GC)。本文就来讨论GC实现的三种基本方式。目前比较常用的几种垃圾回收机制为 计数引用、标记清除法、子节点复制法。还有一些基于这些机制的扩展算法。

  • 计数引用
    计数引用是指,针对每一个对象,保存每一个对象的引用计数,该对象的引用增加,则该对象的引用计数也增加,该对象的引用减少则该对象的引用计数也减少,如果该对象的引用计数为0,则对象就变为“垃圾”,则该回收该对象。
    优点:最大优势就是容易实现,二是成本开销小。三是中断时间小。基本上引用计数0的对象会被立即回收,释放内存,不像其他的机制因为无法预测对象的声明周期,需要特定的时间,所以垃圾存在的时间长,另一方面正式因为垃圾回收可以穿插在程序的运行中,避免一些程序的中断。

    缺点:一、这种回收垃圾的机制,无法对循环引用的无用对象进行回收。二、计数引用不适合在并行中使用,多个线程同时操作计数引用,会引起数值不一样的问题导致内存错误。所以计数引用必须是独占方式。如果引用操作频繁,那么加锁等并发控制机制的开销也是相当大的。

  • 标记清除法(mark & sweep)
    顾名思义,就是标记和清除两个步骤。当堆中的有效内存空间被耗尽的时候,会停止整个程序,然后进行标记、清除两个步骤。
    标记:遍历所有的GC Roots,然后将GC Roots可达的对象标记为存活的对象。
    清除:将遍历堆中的所有对象,将没有标记的对象全部清除。
    需要对对象进行两次扫描,第一次从根root开始扫描,被根引用了的对象标记为不是垃圾,不是垃圾的对象引用的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值