从今天开始将会陆续把自己在看ryzom服务端代码中的心得和学习到的东西记录下来,其中还会参考mangos,ryzom的介绍在这里就不写了,有兴趣的可以自己google.
就像云风大神一再强调的,一个稳定高效的mmorpg服务端还是需要一套自己的内存分配机制,所以今天我们先来看一下ryzom的内存分配机制.以下用到的所有文件都在misc目录下.
1.       CBlockMemory(block_memory.h)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

这是一个块分配策略,每块内存包括固定数目的元素,用完后如果还需要申请内存,就分配一块新的,单个块内存不会释放,除非调用 purge 方法,把所有的块内存都释放掉.见下图

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

 

 

 

 

 
2 CContiguousBlockAllocator(contiguous_block_allocator.h)

     分配一整块内存,需要用多少空间就向这块内存去申请,如果超过了可用的数量,就调用标准的new来分配.见下图

    
 

 

 

3 CPoolMemory(pool_memory.h)

  利用std::vector,预分配n个元素,多个vectorlist储存,释放的时候把所有的vector都释放掉,可以用在临时对象的创建上,见下图

  

 

 
4. CHeapMemory(heap_memory.h)

  对于堆分配的内存进行管理,因为还是使用标准的堆分配方法,所以在速度上没有改变,个人认为意义不好,就不在这讨论了.

 

这里大致就是ryzom所用到的各个内存分配策划,对于一个游戏来说,可以根据不同需求来使用不同的分配策略,比如一般我们对于游戏中的怪物,玩家,npc会预先分配好n个对象实例,这就是CBlockMemory的用武之地。所以还是那句话,要弄清楚自己最小的需求是什么。