物件記憶體池技術

2021-04-12 18:16:51 字數 2085 閱讀 9887

所謂的物件記憶體池技術設計過程如下:

首先為某種物件預先生成若干個空閒物件

,並且使用物件管理類進行管理。應用程式在需要使用此物件時,即向管理物件申請空閒物件.管理物件即檢視物件記憶體池,如果發現存在未使用空閒物件,即分配給申請者。如果發現已無空閒物件,可自行擴充物件記憶體池,並且滿足申請物件的需求,也可以直接返回null,表明物件申請失敗。在程式獲取物件並且使用後,想釋放此物件資源時。繼續想管理物件提出申請釋放物件,管理物件接受到釋放物件後將其再次放入物件池,成為可使用物件。

看了上面的介紹後,接下來以偽**的方式來更加清晰的展現物件獲取和釋放的過程。

申請物件

obj*  {

if 存在空閒物件

{obj *pidleobj = null;

pidleobj = getidleobj(); //獲取空閒物件

return

pidleobj;

}//不存在空閒物件,處理方式如下

方式1:

extendobjectpool();        //擴充物件池

obj *pidleobj = null;

pidleobj = getidleobj();  //獲取空閒物件

return

pidleobj;

方法2:

return

null;

釋放物件

void

releaseobj(obj* pobj) {

if(pobj!=null)

{addtoobjectpool(pobj);   //物件再次加入到物件池 }

}有了上面的這些說明,我想大家對於物件記憶體池技術應該都有了乙個大概了解吧!

(其實沒有什麼高深的技術,只是一些簡單的應用,大家用乙個平常心來看待就可以了!)接下介紹具體來實現這個物件記憶體池,我們需要做些什麼?

在實現物件記憶體池之前,先提出幾個我們需要達到的目標:

u 物件記憶體池管理物件具有廣泛的通用性,也就是說能夠滿足應用程式生成各個不同的物件池,例如:p

layer物件池、monster物件池、npc物件池。

u 產生物件的速度一定要快於直接使用

new/delete或者malloc/free方式很多倍。

u 物件池容量具有可擴充套件性和糾錯能力。也就是說在無空閒物件時,管理物件類能夠自動生成一批新的空閒物件供上層使用,同時能夠正確指出目前所使用物件是否為合法物件池物件。

u 物件的申請和釋放,必須具備多執行緒安全性。也就是說在伺服器程式通過各個不同執行緒同時訪問物件池管理時,能夠保證合法獲取和釋放池物件。

)解決方案1:(單鏈表實現)u

第一步,分配模板物件陣列,並且用指標儲存。

u 第二步,建立一單鏈表管理類,將已經分配成功的陣列物件,分配到鍊錶中,同時設定表頭和表尾指標。

u 第三步,從物件池中申請物件,首先檢測鍊錶中是否存在可使用空閒物件。如果沒有可返回

null,也可以先鎖定擴充鍊錶(儲存擴充套件物件陣列指標)。然後返回可使用物件給使用者。

u 第四步,釋放物件池物件時,首先將表尾指標指向被釋放物件,接下來被**物件為此煉表表尾。完成釋放過程。

u 最後,記憶體釋放,

delete陣列指標。

圖例演示如下:

解決方案2:(雙鏈表實現)u

為了能夠使我們建立的物件池能夠在應用程式中通用,我們考慮使用模板

template來生成我們的class cobjectpool.

u 為了能夠快速獲取物件,我們採用雙向鍊錶的方式來建立我們的物件池。物件獲取從當前煉表頭開始進行,物件釋放直接加到鍊錶尾。操作過程中需要使用一附加指標物件表明當前可使用物件位置。若此指標為

null,表明已無可使用空閒物件。

u 為了生成乙個一定容量的物件池,我們可以通過模板的方式也可以通過初始化

init方式來生成初始物件池。在申請過程中無空閒物件,需要向系統重新一定數目物件,並且按照順序加到鍊錶尾。實現物件池的可擴充性。

u 為了保證多執行緒安全,我們在物件 

記憶體池技術

經典的記憶體池技術 經典的記憶體池 mempool 技術,是一種用於分配大量大小相同的小物件的技術。通過該技術可以極大加快記憶體分配 釋放 過程。下面我們詳細解釋其中的奧妙。經典的記憶體池只涉及兩個常量 memblocksize itemsize 小物件的大小,但不能小於指標的大小,在32位平台也就...

記憶體池技術

記憶體池技術是一種飽受爭議的技術 爭議熱點在於到底有沒有必要自己實現。1.記憶體池技術出現在libc尚不成熟的時候,當時程式經常在執行一段時間後效能下降,當時維護記憶體池很有必要 2.現在64位伺服器經常是32g以上的記憶體,管理記憶體碎片意義不打 3.寫malloc的各位都是大神,自己寫有99 的...

記憶體池 MemPool 技術詳解 經典記憶體池

url align center b 概述 b align 記憶體池 mempool 技術備受推崇。我用google搜尋了下,沒有找到比較詳細的原理性的文章,故此補充乙個。另外,補充了boost pool元件與經典mempool的差異。同時也描述了mempool在sgi stl stlport中的運...