參考<>一書中的條款10:"如果寫了operator new就要同時寫operator delete",寫了乙個簡易的記憶體池,說白了就是事先分配一塊記憶體空間作為記憶體池,每次new物件的時候,直接從這裡取記憶體,delete的時候將記憶體**到記憶體池中,**很簡單,廢話就不說了,直接看**。
#include "執行介面如下:stdafx.h
"#include
using
namespace
std;
//記憶體池
templateclass
pool
headoffreelist = (t *)malloc(sizeof(t) *element_num);
if (null ==headoffreelist)
int i = 0
;
for (; i < element_num - 1; i++) //
將記憶體串起來
*(t** )(headoffreelist + i) =null;
pstart =headoffreelist;
}~pool(void
)
t *alloc(void
)
t *p =headoffreelist;
headoffreelist = *(t**)headoffreelist;
return
p; }
void dealloc(t*p)
private
:
void *pstart; //
記住分配的首位址,用於記憶體釋放
t *headoffreelist; //
未使用記憶體的首位址
};//
使用記憶體池的物件的大小不能小於乙個指標的大小,否則會出錯!
class
airplane
static
void* operator
new(size_t size)
static
void
operator delete(void *p)
private
:
static poolmempool;
intnumber;
};pool
airplane::mempool(10); //
預先分配10個airplane的記憶體空間
int _tmain(int argc, _tchar*argv)
簡易記憶體池的實現
1.記憶體池的引入 實際運用當中,如果我們需要申請一塊空間,我們一般都會new一塊空間 在c語言裡會用到malloc 我們知道他們兩個的共同點就是在堆上申請空間,堆上的空間會比棧上的大一些 在windows的vs環境下,棧的預設大小是1mb,但是可以自己調整 所以我們可以自己去申請自己需要的大小 當...
簡易記憶體池(物件池)的實現
pragma once include include include 物件池的實現 針對於乙個知道型別的物件 我們通過物件池 來比較普通向記憶體中申請空間 和我們直接向我們的記憶體池中申請空間的效能對比 template class t,size t initnum 10000 設定記憶體池中取出...
簡易記憶體池
include new 1.開闢記憶體 2.初始化 delete 1.釋放資源 2.釋放記憶體 new1.開闢記憶體 operator new 系統 2.呼叫建構函式 delete 1.呼叫析構函式 2.釋放物件的記憶體 operator delete 系統 自主的記憶體管理機制 通過對new,de...