遊戲服務器端開發1-對象池技術及實現

一、由問題產生的思考

遊戲服務器要求的是穩定,高併發和客戶端請求的快速響應,但new和delete的次數增加將增加運行時間,降低服務器的運行效率,增加內存碎片,過激的情況下,還將導致服務器內存耗盡。同時,new和delete用得不恰當還將導致內存泄露。


二、使用對象池的好處

爲了解決以上提出的問題,最好的解決方法就是對象池。

1.使用對象池可以減少從頭創建對象的系統開銷,減少new,delete次數,減少運行時間,從而提高運行效率。

2.減少new,delete次數過多產生的內存碎片。

3.內存統一管理,避免內存泄露。當需要使用對象時,向對象池中申請,不用的時候,歸還到對象池中,一次new,重複利用。


三、具體實現

設計構思:

1.一個對象池包含:

pUseBlockList(可用內存塊列表)

pDisBlockList(不可用內存塊列表)

2.一個內存塊包含:

UnitCount(保存一個內存塊一共有多少個內存單元)

First(保存一個內存塊下一個要被分配的內存單元的序號)

pBlock(保存一個內存塊的頭指針)

pPrevBlock(指向上一內存塊指針)

pNextBlock(指向下一內存塊指針)

pFreeUnitList(空閒內存單元列表)

3.一個內存單元包含:

pNextUnit(保存下一內存單元指針)

pMemoryBlock(該內存單元屬於哪一個內存塊指針)

T(對象數據)


四、效果展示與源碼


通過以上一個不是很科學測試結果顯示,一千萬個對象,使用對象池的運行效率比普通new和delete對象提高了50%以上,從而達到了提高運行效率和減少內存碎片的作用。


源碼鏈接:點擊打開鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章