天天看點

ryzom分析-記憶體管理

從今天開始将會陸續把自己在看ryzom服務端代碼中的心得和學習到的東西記錄下來,其中還會參考mangos等,ryzom的介紹在這裡就不寫了,有興趣的可以自己google.

就像雲風大神一再強調的,一個穩定高效的mmorpg服務端還是需要一套自己的記憶體配置設定機制,是以今天我們先來看一下ryzom的記憶體配置設定機制.以下用到的所有檔案都在misc目錄下.

1.       CBlockMemory(block_memory.h)

這是一個塊配置設定政策,每塊記憶體包括固定數目的元素,用完後如果還需要申請記憶體,就配置設定一塊新的,單個塊記憶體不會釋放,除非調用purge方法,把所有的塊記憶體都釋放掉.見下圖

ryzom分析-記憶體管理
ryzom分析-記憶體管理
ryzom分析-記憶體管理

2.CContiguousBlockAllocator(contiguous_block_allocator.h)

     配置設定一整塊記憶體,需要用多少空間就向這塊記憶體去申請,如果超過了可用的數量,就調用标準的new來配置設定.見下圖

ryzom分析-記憶體管理

3.CPoolMemory(pool_memory.h)

  利用std::vector,預配置設定n個元素,多個vector用list儲存,釋放的時候把所有的vector都釋放掉,可以用在臨時對象的建立上,見下圖

ryzom分析-記憶體管理

4. CHeapMemory(heap_memory.h)

  對于堆配置設定的記憶體進行管理,因為還是使用标準的堆配置設定方法,是以在速度上沒有改變,個人認為意義不好,就不在這讨論了.

這裡大緻就是ryzom所用到的各個記憶體配置設定策劃,對于一個遊戲來說,可以根據不同需求來使用不同的配置設定政策,比如一般我們對于遊戲中的怪物,玩家,npc會預先配置設定好n個對象執行個體,這就是CBlockMemory的用武之地。是以還是那句話,要弄清楚自己最小的需求是什麼。

繼續閱讀