程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> ryzom分析-內存管理

ryzom分析-內存管理

編輯:關於C語言

從今天開始將會陸續把自己在看ryzom服務端代碼中的心得和學習到的東西記錄下來,其中還會參考mangos,ryzom的介紹在這裡就不寫了,有興趣的可以自己google. 就像雲風大神一再強調的,一個穩定高效的mmorpg服務端還是需要一套自己的內存分配機制,所以今天我們先來看一下ryzom的內存分配機制.以下用到的所有文件都在misc目錄下. 1.       CBlockMemory(block_memory.h) 這是一個塊分配策略,每塊內存包括固定數目的元素,用完後如果還需要申請內存,就分配一塊新的,單個塊內存不會釋放,除非調用purge方法,把所有的塊內存都釋放掉.見下圖           2CContiguousBlockAllocator(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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved