Cocos2d-x内存管理——读我所理解的cocos2d-x整理
来源:互联网 发布:淘宝零食店 知乎 编辑:程序博客网 时间:2024/05/28 11:30
C++显示堆内存管理
我们熟知的new和delete,手动进行,性能高,但容易出现
(1)野指针:指向已被释放的内存单元,该内存单元可能会重新被分配给其他对象。
(2)重复释放:重复释放一个已被释放的内存或者释放一个野指针。
(3)内存泄漏:没有释放不被使用的内存,不断操作会导致内存不断增加。
C++11提供智能指针,原理是将动态分配的内存单元和一个自动变量关联,自动变量是局部变量,离开作用域自动释放。
三种智能指针:
unique_ptr,独占内存所有权
shared_ptr,共享内存,采用引用计数,计数为0即释放内存
weak_ptr,可指向shared_ptr分配的对象内存,但不拥有该内存,用于检查shared_ptr的有效性。
智能指针缺点:性能损失(为保证线程安全加互斥锁)和显式声明。
Cocos2d-x的选择:
1、autorelease():将一个对象添加到一个AutoreleasePool中,每帧结束的时候AutoreleasePool对池中的每个对象执行一次release操作(retain增加引用计数,release减少引用计数),引用计数为0则清理对象。cocos通过create()方法调用autorelease()。
2、智能指针RefPtr< T >:T必须是Ref类型,类似shared_ptr,保持着一个Ref*对象的强引用,并使用cocos2d-x自身的引用计数来管理多个智能指针对内存的共享。比shared_ptr更轻量级但无法保证线程安全。通过weekAssign方法实现弱引用。
关于两者的总结:
如果RefPtr代替autorelease,那么任何一个对Node的资源引用都是强引用,这使当Node从UI树中移除时,还需要使用reset释放其对Node资源的占用,这显然是无法控制的。
如果autorelease代替RefPtr,由于autorelease完全依赖于自动回收池的释放,所以各个共享的变量几乎无法控制对资源的使用。
因此,对UI元素,使用autorelease来管理,而游戏中的数据则使用智能指针RefPtr来管理。
- Cocos2d-x内存管理——读我所理解的cocos2d-x整理
- 我所理解的Cocos2d-x Cocos2d-x 内存管理机制
- 我所理解的Cocos2d-x
- 《我所理解的Cocos2d-x》PDF
- cocos2d-x内存管理的概括理解
- 【cocos2d-x】cocos2d-x的内存管理
- 我所理解的Cocos2d-x 全新的绘制系统
- 我所理解的Cocos2d-x UI树
- 我所理解的Cocos2d-x 应用程序架构
- 我所理解的Cocos2d-x 实时更新游戏对象
- 我所理解的Cocos2d-x 主线程
- 我所理解的Cocos2d-x OpenGL ES 2.0 概览
- 《我所理解的Cocos2d-x》书评及笔记
- cocos2d-x的内存管理
- cocos2d-x的内存管理
- Cocos2d-X的内存管理
- Cocos2d-x 的内存管理
- Cocos2d-x 的内存管理
- Android黑名单电话挂断(AIDL)
- linux下部署多个tomcat的方法
- Base58UUID生成
- 网络流总结
- SQL语句中----删除表数据drop、truncate和delete的用法
- Cocos2d-x内存管理——读我所理解的cocos2d-x整理
- JavaScript高级程序设计读书笔记(第六章)(一)
- 各种居中的方式
- CoreOS安装到硬盘
- 对一个文件中的指定信息进行过滤输出结果
- Nodejs 部署到阿里云全过程
- [C#]Array.Sort()排序的原理
- bzoj2179(fft模板)
- 终于开通自己的博客了