从今天开始将会陆续把自己在看
ryzom
服务端代码中的心得和学习到的东西记录下来
,
其中还会参考
mangos
等
,ryzom
的介绍在这里就不写了
,
有兴趣的可以自己
google.
就像云风大神一再强调的
,
一个稳定高效的
mmorpg
服务端还是需要一套自己的内存分配机制,所以今天我们先来看一下
ryzom
的内存分配机制
.
以下用到的所有文件都在
misc
目录下
.
1.
CBlockMemory(block_memory.h)
这是一个块分配策略
,
每块内存包括固定数目的元素
,
用完后如果还需要申请内存
,
就分配一块新的
,
单个块内存不会释放
,
除非调用
purge
方法,把所有的块内存都释放掉.见下图
2
.
CContiguousBlockAllocator(contiguous_block_allocator.h)
分配一整块内存,需要用多少空间就向这块内存去申请,如果超过了可用的数量,就调用标准的new来分配.见下图
3
.CPoolMemory(pool_memory.h)
利用std::vector,预分配n个元素,多个vector用list储存,释放的时候把所有的vector都释放掉,可以用在临时对象的创建上,见下图
4. CHeapMemory(heap_memory.h)
对于堆分配的内存进行管理,因为还是使用标准的堆分配方法,所以在速度上没有改变,个人认为意义不好,就不在这讨论了.
这里大致就是ryzom所用到的各个内存分配策划,对于一个游戏来说,可以根据不同需求来使用不同的分配策略,比如一般我们对于游戏中的怪物,玩家,npc会预先分配好n个对象实例,这就是CBlockMemory的用武之地。所以还是那句话,要弄清楚自己最小的需求是什么。