网站大量收购独家精品文档,联系QQ:2885784924

10内存.PDF

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
10内存

第10 章 内存管理机制 “内存管理”经常被一些新手看作是非常高深的技术。因为貌似只有多年经验的开发者,才会谈论到内 存的管理技术。甚至一些高级语言早已提供了优秀的内存管理方法。但是作为Cocos2D-X 所使用的主要编 程语言C++ ,却没有内存管理的功能。这也是C++语言的使用者较少,学习门槛较高的原因之一。本章节 将会围绕Cocos2D-X 引擎的内存管理机制进行讲解,让读者清楚明白地掌握这门高深的技术。 说明:Java 和Objective-C 编程语言本身就提供了垃圾回收的内存管理方式。 10.1 内存管理概述 内存管理一直都被开发者看作是一项重要的技术。无论是应用程序,还是游戏产品,内存管理的技术 都发挥着关键作用。因为任何应用程序都是依附于内存而运转的。代码中创建的所有对象以及变量,都将 存在于内存当中。内存为CPU 运算提供了数据环境。由此可见,内存是一项很重要的资源。尤其是资源有 限的手持平台,更显得物以稀为贵。 内存管理是成为编程高手的必经之路。所谓的内存管理是应用程序对电子设备内存资源的分配和使用技术。 从计算机时代开始,开发者就一直关注于如何高效、快速地分配,并且在适当的时候释放和回收内存资源。对 于多数程序员来说,内存管理的认识都是来自于图10-1 所示的内存不足警告。 内存管理包含着很多深奥的技术。读者想要弄得透彻明白,可不是这一个 章节就能搞定的。整整一本书估计都不够。但这并不代表内存管理是不能触碰 的绝对领域。不要被那些经验老道、满口是非的程序员忽悠。他们常常挂在嘴 边的一句话就是“内存管理很难啊!可要小心点!”。这一切都是纸老虎。阅读 图10- 1 内存不足的警告 了本章节的内容后,读者就会有所领悟。内存管理并没有听上去那么难。 Cocos2D-X 引擎提供了一套完善的内存机制,帮助开发者解决了管理内存的繁琐。这正是保证引擎能 够稳定高效运行的核心。引擎中运用了成熟的内存管理技术,使得初级开发者也能够运用自如。就算不清 楚其原理,开发者依然能够制作出优秀的游戏产品。 说明:之前章节的内容,已经有很多运用内存管理的地方。但是在介绍的过程中,我们并没有遇到内 存的问题。 内存管理中经常遇到两个问题:内存泄漏与内存溢出。 (1)内存溢出是指有限的内存资源被全部占用了。应用程序无法再申请新的内存空间。这就好比去超 市买东西,购物袋已经塞满了,但是东西还没齐备,此时就只能丢掉一部分东西了。对应用程序来说,那 就是一个严重的问题,有可能会导致内容缺失,也有可能会导致数据或者逻辑错乱。 (2 )内存泄漏是指内存中的资源被遗弃了。由于疏忽或错误造成程序未能释放已经不再使用的内存, 这些被遗弃的内存并不会被重新利用,反而会一直占据了资源。轻微的内存泄漏并不严重,但是当过多的 内存遭到浪费,就会导致内存溢出的情况。 谁也不希望遇到问题,但是编写代码可不能靠运气。现阶段的计算机是没有智能的,它只能够执行开 发者编写好的代码。所以为了避免内存的问题导致游戏产品出现崩溃或者闪退的现象,读者就需要仔细阅 读下面的内容了。在Cocos2D-X 引擎中使用了引用计数和自动释放池的技术来管理内存。有过Objective-C 或者 Java 编程经验的读者,应该对这两个名词并不陌生。这正是两种编程语言垃圾回收机制实现的方法。 所以接下来读者有机会了解其内部的运作机制。 说明:引用计数和自动释放池的内存管理技术并不是Cocos2D-X 引擎独创的,在很多领域都有其应用。 10.2 引用计数 Cocos2D-X 引擎中使用了引用计数的原理。这是一种古老而有效 的内存管理技术。它是自动内存管理实现的基础。引用计数的道理很 简单,一句话就可以说明白,在对象的内部增加一个计数器。当其外 部引用增加时,计数器就加一;当外部引用消失时,其计数器就减一。 如图10-2 所示的方式。 Cocos2D-X 引擎中,任何的对象都可以使用引用计数的方式。这 主要是因为类 Ref 提供了基本引用计数功能。接下来,我们就通过类 Ref 的源代码来了解引用计数的规则。

文档评论(0)

l215322 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档