記憶體池設計(五)

2022-07-16 00:09:17 字數 1496 閱讀 6372

將以上**組裝,並自己設計累 user 來測試這個記憶體池

#include#define mempool_alignment 8  //

對齊長度

using

namespace

std;

///記憶體塊及其資訊表 memory block-----------------------

templatestruct

memoryblock

cout

<<"

-------------呼叫記憶體塊的建構函式-------------------

"<}

void *operator

new(size_t,int nunitsize,int

nunitamount)

void

operator delete(void *pblock)

};///

記憶體池資訊表

templatestruct

memorypool

~memorypool()

cout

<<"

--------------------呼叫記憶體池的析構函式-------------------

"<}///

用於向記憶體池請求儲存單位的函式,也是記憶體池向使用者提供的主要服務

///遍歷記憶體塊鍊錶,找到nfree 大於0 即有空閒的記憶體塊 並從其上分配儲存單位

///然後將memoryblock 中nfree 減一 並修改空閒儲存單位煉表頭指標 nfirst 的值

void *allocate(size_t num)

///為記憶體尋找符合條件的記憶體塊

memoryblock*pmyblock=pblock;

while(pmyblock!=null&&0==pmyblock->nfree)

pmyblock=pmyblock->pnext;

if(pmyblock!=null)

else}}

//free 函式用於釋放記憶體塊 該函式根據pfree 的值找到他所在的記憶體塊 然後將它的序號作為nfirst的值(因為他絕對空閒)

//在pfree 的頭兩個位元組內寫入原來nfirst 的值。然後要判斷 該block 是否全部為free 方法是檢測nfree*nunitsize==size

//若是 則向系統釋放記憶體 若不是 則將該block 放到鍊錶的頭部 因為該block上一定含有記憶體單元 這樣可以減少分配是遍歷

//鍊錶所消耗的時間

void free(void *pfree)

//該記憶體塊在被記憶體池pmyblock 所指向的記憶體塊中

if(null!=pmyblock)

else

}}};

class

user

intget

()

~user()

};int

main()

至此 ,記憶體池的設計以及實現完成。

記憶體池設計(三)

從 adata 開始的區域為記憶體塊用於儲存資料元素的空間,這裡將它稱為資料空間。該資料空間以資料的大小nunitsize劃分為儲存單位,每個儲存單位可以儲存乙個資料。為了對尚未被分配使用的空閒單位進行識別,需要對他們編織序號。在記憶體塊初始化時要編制序號,當記憶體塊被被釋放回記憶體池時也要為他們編...

記憶體管理之記憶體池的設計

如何更好的管理在應用程式中記憶體的使用,同時提高記憶體使用的效率,這是值得每乙個做開發的人深思的問題。記憶體池 memory pool 提供了一種比較可行的解決方案。下面就一般記憶體池的原理與設計進行 一般的記憶體池的使用,分為以下幾個過程 1.建立記憶體池。這個過程的主要任務是預先分配足夠大的記憶...

記憶體池 C 記憶體池

c c 下記憶體管理是讓幾乎每乙個程式設計師頭疼的問題,分配足夠的記憶體 追蹤記憶體的分配 在不需要的時候釋放記憶體 這個任務相當複雜。1.呼叫malloc new,系統需要根據 最先匹配 最優匹配 或其他演算法在記憶體空閒塊表中查詢一塊空閒記憶體,呼叫free delete,系統可能需要合併空閒記...