簡易記憶體池(物件池)的實現

2021-10-01 05:03:59 字數 1620 閱讀 6567

#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...