ryzom分析-内存管理

从今天开始将会陆续把自己在看 ryzom 服务端代码中的心得和学习到的东西记录下来 , 其中还会参考 mangos ,ryzom 的介绍在这里就不写了 , 有兴趣的可以自己 google.
就像云风大神一再强调的 , 一个稳定高效的 mmorpg 服务端还是需要一套自己的内存分配机制,所以今天我们先来看一下 ryzom 的内存分配机制 . 以下用到的所有文件都在 misc 目录下 .
1.       CBlockMemory(block_memory.h)
这是一个块分配策略 , 每块内存包括固定数目的元素 , 用完后如果还需要申请内存 , 就分配一块新的 , 单个块内存不会释放 , 除非调用 purge 方法,把所有的块内存都释放掉.见下图
 
 ryzom分析-内存管理_第1张图片
 
 
 
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的用武之地。所以还是那句话,要弄清楚自己最小的需求是什么。

你可能感兴趣的:(职场,休闲,ryzom)