從今天開始將會陸續把自己在看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的用武之地。所以還是那句話,要弄清楚自己最小的需求是什麼。
本文出自 “高築牆廣積糧” 博客,請務必保留此出處http://adamgliea.blog.51cto.com/1982201/368085