cocos2dx概要及开发技术-----Cocos2d-x内存管理

目的:了解cocos2dx内存管理机制


内存管理机制   


1 c++内存管理机制
(1)new /delete   C++中新增   (注意:释放数组用 delete[])
char* p = new char;
delete p;


char* pArr = new char[5];
delete[] pArr;


(2)malloc / free   c语言原有的
char* p = (char*) malloc(sizeof(char));
free(p);


2 引用计数管理机制(实现简单,缺点是循环引用)
(1) 接口
sprite->retain(); //计数加1   如果对一个对象赋值,需要手动加一
sprite->release();//计数减一
sprite->retainCount();//返回计数



  其他机制还有  
《2. 标记-清扫(mark-sweep)  
基本思路是先按需分配,等到没有空闲内存的时候从寄存器和程序栈上的引用出发,遍历以对象为节点、以引用为边构成的图,把所有可以访问到的对象打上标记,然后清扫一遍内存空间,把所有没标记的对象释放。
《3 节点复制(copying)
基本思路是把整个内存空间一分为二,不妨记为 A 和 B。所有对象的内存在 A 中分配,当 A 塞满的时候,同样从寄存器和程序栈上的引用出发,遍历以对象为节点、以引用为边构成的图,把所有可以访问到的对象复制到 B 去,然后对调 A 和 B 的角色。
《4 分代(generational)垃圾收集。它的基本思路是这样的:程序中存在大量的临时对象,分配出来之后很快就会被释放,而同时如果一个对象分配出来之后相当长的一段时间内都没回收,那么极有可能它的生命周期很长,尝试收集它会是无用功。所以可以把内存有意识地按“对象年龄”分成若干块,不妨记为老中青(XD),所有的分配都在青代进行,青代塞满只对青代做 GC,然后把存活下来的对象移动到中代,直到中青代都塞满,再把存活下来下来的对象移动到老代 —— 这只是个思路上的例子,实践中分代式垃圾收集算法的方案五花八门,而且常常同时使用了不止一种基本算法(比如青代用节点复制,老代用标记清扫啥的)。

——引申《代码的未来》,其中的 “2.4 内存管理” 对GC有较详细的论述,
并且也对几种不同编程语言的GC做了比较。
补一下2.4的章节目录:
2.4 内存管理 61 
看似无限的内存 61 
GC的三种基本方式 62 
术语定义 62 
标记清除方式 63 
复制收集方式 64 
引用计数方式 65 
引用计数方式的缺点 65 
进一步改良的应用方式 66 
分代回收 66 
对来自老生代的引用进行记录 67 
增量回收 68 
并行回收 69 
GC大统一理论 69


3 自动释放机制
cocos2dx自带一个全局的内存池PoolManager,即程序内部在new之后,sprite->autorelease();
接口中,
带init不具有自动释放机制,需new了之后再调用。
带create的具有new和自动释放机制。


4 get set的设计方法及宏,不直接访问内部变量。
(1)cocos2dx自带了属性宏 CC_SYNTHESIZE,来自动化实现get set语句声明与定义。
(2)CC_SYNTHESIZE_RETAIN 宏,只定义指针类型的get set声明。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值