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

cocos2dx概要及开发技术-----Cocos2d-x内存管理,第1张

概述目的:了解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 目的:了解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声明。 总结

以上是内存溢出为你收集整理的cocos2dx概要及开发技术-----Cocos2d-x内存管理全部内容,希望文章能够帮你解决cocos2dx概要及开发技术-----Cocos2d-x内存管理所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1055512.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存