深入理解对象池技术

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。

CSDN视频网址:http://edu.csdn.net/lecturer/144

对象池在游戏开发中使用的非常广泛,尤其对于内存的管理方面,很多人知道对象池但是不理解,本篇博客使用通俗的语言给读者讲解。。。。。。

游戏中通过重新使用固定池中的对象来提高性能和内存使用,而不是单独分配和释放对象。  举例,游戏的视觉效果, 当英雄施放一个咒语时,我们想要一阵闪闪发光的闪光, 这就需要一个粒子系统,粒子系统是引擎必须要支持的。
粒子播放时,可能导致数百颗粒子产生,系统需要能够很快地创建它们, 更重要的是,我们需要确保创建和销毁这些粒子不会导致内存碎片。

移动设备的编程在许多方面比传统的PC编程更接近嵌入式编程 内存稀缺,用户期望游戏稳定,高效的压缩内存管理器很少可用。 在这种环境中,内存碎片是致命的。
碎片意味着我们堆中的可用空间被分解成较小的内存块,而不是一个大的开放块。 可用的总内存可能很大,但最大的连续区域可能会很小。 假设我们已经有十四个字节可用,但是它们被分成两个七字节的片段,它们之间带有大量的使用内存。 如果我们尝试分配一个十二字节的对象,我们将失败。
如下所示:

由于碎片,因为分配可能很慢,游戏对于管理内存的时间和方式非常谨慎。 一个简单的解决方案通常是最好的 - 在游戏开始时抓住大块内存,并且不要释放它直到游戏结束。 但是,对于在游戏运行期间需要创建和销毁东西的系统来说,这是一个痛苦。
对象池给了我们两个世界最好的
对于内存管理员,我们只是在前面分配一大块内存,而不是在游戏中释放它。 对于池的用户,我们可以自由地分配和释放对象到我们心脏的内容。

定义一个维护一个可重用对象集合的池类。 每个对象都支持一个“在使用中”查询来判断当前是否“活着”。 当池初始化时,它将在前面创建整个对象集合(通常在单个连续分配中),并将它们全部初始化为“未使用”状态。
当你想要一个新对象时,
查询一个池 它找到一个可用对象,将其初始化为“正在使用”,并返回。 当对象不再需要时,它被设置回到“不使用”状态。 这样,可以自由地创建和销毁对象,而不需要分配内存或其他资源。

  这种模式在游戏中广泛应用于诸如游戏实体和视觉效果之类的明显的东西,但它也用于不太可见的数据结构,例如当前播放的声音。 使用对象池时:
一、您需要频繁地创建和销毁对象。
二、对象的大小相似。<

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海洋_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值