簡易記憶體池的實現

2021-09-06 06:22:58 字數 1356 閱讀 3677

參考<>一書中的條款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...