File tree 1 file changed +4
-4
lines changed
1 file changed +4
-4
lines changed Original file line number Diff line number Diff line change 1
1
对象池
2
2
============================
3
3
4
- ## 目标
4
+ ## 目的
5
5
6
6
使用固定池重用对象,取代手动分配,释放对象,以此来达到提升性能和内存使用的目的
7
7
37
37
38
38
使用对象池使得我们二者兼顾:对于内存管理器而言,我们仅分配一大块内存直到游戏结束才释放它,对于内存池的使用者而言,我们可以按照自己的意愿来分配和释放对象。
39
39
40
- ## 对象池模式
40
+ ## (对象池)模式
41
41
42
42
定义一个保持着可重用对象集合的对象池类。其中的每个对象支持对其”使用中”(“in use”)状态的访问,以确定这一对象目前是否“存活”(“alive”)。当对象池初始化时,它预先创建整个对象的集合(通常为一块连续堆区域),并将它们都置为”未使用” (“not in use”) 状态。
43
43
103
103
104
104
假如你使用了对象池,请注意一个潜在的矛盾:由于对象池在对象不再被使用时并不真正地释放它们,故它们仍占用内存。假如它们包含了指向其他对象的引用,这也将阻碍回收机制对它们进行释放。为避免这些问题,当对象池中的对象不再被需要时,应当清空它指向其他任何对象的引用。
105
105
106
- ## 例子
106
+ ## 示例
107
107
108
108
模拟现实的粒子系统常常会应用到重力,风力,摩擦力以及其他物理效果。在简化的示例中,我们只是在几帧的时间内将粒子沿着直线移动一些距离,并在结束后销毁它们。虽不比标准的电影水准,但足以为我们展示对象池的应用。
109
109
@@ -336,7 +336,7 @@ void ParticlePool::animate()
336
336
337
337
这就是了,一个漂亮的,在创建和删除时具有常量时间开销的小对象池。
338
338
339
- ## 设计的一些考虑
339
+ ## 设计决策
340
340
341
341
如你所见,最简单的对象池实现几乎没什么特别的:创建一个对象数组并在它们被需要时重新初始化。实际项目中的代码可不会这么简单。还有许多扩展对象池的方法,来使其更加通用,安全,便于管理。当你在自己的游戏中使用对象池时,你需要回答以下问题:
342
342
You can’t perform that action at this time.
0 commit comments