將以上**組裝,並自己設計累 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,系統可能需要合併空閒記...