#pragma once
#include
#include
#include
// 物件池的實現 針對於乙個知道型別的物件
//我們通過物件池 來比較普通向記憶體中申請空間
//和我們直接向我們的記憶體池中申請空間的效能對比
template
<
class
t, size_t initnum =
10000
>
//設定記憶體池中取出的最大數量為100
class
objectpool
t*&nex_obj
(t* obj)
t*new()
else
// 空間足夠 從記憶體池中取資料
obj = _start;
//_start 是char* ,得強轉成t*,才可以給t*型別的變數賦值
//obj就是從記憶體池中取出的一段位址
_start +=1
;//向後移動乙個節點的itemsize;
}//new的 定位表示式
new(obj)t;
//建立乙個物件 但是不開闢空間, 而是用在自己的空間obj上,
//new的定位 表示式。
//建立物件但是並不分配記憶體,而是在已有的記憶體塊上面建立物件。
//用於需要反覆 建立並刪除的物件上,可以降低分配釋放記憶體的效能
//消耗
// obj這個位置必須是指標,在這裡obj已經指向了分配好的記憶體.
// return obj;
}void
delete
(t* ptr)
private
: t* _start;
//管理記憶體池的首指標
t* _end;
//管理記憶體池的尾指標
size_t _itemsize;
t* _freelist;
//鍊錶指標};
//void testobjectpool()
//void
benchmark()
//效能分析
for(size_t i =
0; i < n; i++
) size_t end1 =
clock()
; v1.
clear()
; cout <<
"直接系統申請記憶體:"
<< end1 - begin1 << endl;
vector>v2;
v2.reserve
(n);
objectpool pool;
size_t begin2 =
clock()
;for
(size_t i =
0; i < n; i++
)for
(size_t i =
0; i < n; i++
) size_t end2 =
clock()
; v2.
clear()
; cout <<
"pool 申請記憶體: "
<< end2 - begin2 << endl;
}
c 實現簡易記憶體物件池
目的 1 防止記憶體頻繁 遊走在new和delete中被折磨 2 減少記憶體碎片的產生,同時稍稍的提高下效能。思路 1 外界有記憶體需求的時候,就去memory pool獲取 2 外界用完某塊記憶體之後,就歸還memory pool 3 memory pool 這個類來管理記憶體。ifndef me...
簡易記憶體池的實現
1.記憶體池的引入 實際運用當中,如果我們需要申請一塊空間,我們一般都會new一塊空間 在c語言裡會用到malloc 我們知道他們兩個的共同點就是在堆上申請空間,堆上的空間會比棧上的大一些 在windows的vs環境下,棧的預設大小是1mb,但是可以自己調整 所以我們可以自己去申請自己需要的大小 當...
簡易記憶體池的實現
參考 一書中的條款10 如果寫了operator new就要同時寫operator delete 寫了乙個簡易的記憶體池,說白了就是事先分配一塊記憶體空間作為記憶體池,每次new物件的時候,直接從這裡取記憶體,delete的時候將記憶體 到記憶體池中,很簡單,廢話就不說了,直接看 include s...