記憶體池系列

2021-09-22 21:19:07 字數 2007 閱讀 9514

(1)實現乙個單執行緒可變大小記憶體管理器

標頭檔案:

#ifndef memorypook_h

#define memorypook_h

class memorychunk

memorychunk* nextmemchunk()

enum ;

private:

void* mem;//

memorychunk * nextchunk;

size_t chunksize;

size_t bytesalreadyallocated;

};class bytememorypool ;

#endif

原始檔

#include"memorypool.h"

memorychunk::memorychunk(memorychunk * nextchunk, size_t reqsize)

memorychunk::~memorychunk()

//分配函式

void* memorychunk::alloc(size_t requestsize)

void memorychunk::free(void* doomed)

bytememorypool::bytememorypool(size_t initsize)

bytememorypool::~bytememorypool()

//memchunk = 0;//這一步因為memchunk是區域性變數 很快被釋放 所以可以不要 但是要有防止野指標的意識

}void* bytememorypool::alloc(size_t reqsize)

return listofmemorychunks->alloc(reqsize);

}void bytememorypool::expandstorage(size_t reqsize)

void bytememorypool::free(void* doomed)

(2)固定大小物件記憶體池

//標頭檔案 

#ifndef memorypool_h

#define memorypool_h

template class memorypool ;

void expandthefreelist(size_t howmany= expansion_size);

};templatememorypool::memorypool(size_t size)

templatememorypool::~memorypool()

}templatevoid*memorypool::alloc(size_t size)

templateinline void memorypool::free(void* someelement)

templatevoid memorypool::expandthefreelist(size_t howmany)

runner->next = 0;//注意這裡一定要初始化為null

}#endif

//演示類 該類定義了乙個靜態memorypool*指標 並且過載了new 和delete等 

class rational

void* operator new(size_t size)

void operator delete(void *doomed)

static void newpool()

static void deletemempool()

private:

int n;

int d;

static memorypool*mempool;

};memorypool* rational::mempool = 0;

(3)將在閒暇之餘發布更多相關記憶體池系列內容原始碼

參考《提高c++效能的程式設計技術》原書pdf有一定bug,也可能是由於印刷原因,本段**已經加以抹平。

String系列 記憶體池技術

前言 閱讀stl原始碼中記憶體池的實現,感觸頗深,但又不知如何描述,stl原始碼剖析中已經描述的非常清楚了。所以這裡我把其原始碼整理了一下,去除了多執行緒,方便閱讀其實現原理。記憶體池標頭檔案 class memorypool union obj private static obj volatil...

記憶體池 C 記憶體池

c c 下記憶體管理是讓幾乎每乙個程式設計師頭疼的問題,分配足夠的記憶體 追蹤記憶體的分配 在不需要的時候釋放記憶體 這個任務相當複雜。1.呼叫malloc new,系統需要根據 最先匹配 最優匹配 或其他演算法在記憶體空閒塊表中查詢一塊空閒記憶體,呼叫free delete,系統可能需要合併空閒記...

記憶體池 執行緒池

1 記憶體池是在真正使用記憶體之前,先申請分配一定數量的 大小相等 一般情況下 的記憶體塊留作備用。當有新的記憶體需求時,就從記憶體池中分出一部分記憶體塊,若記憶體塊不夠再繼續申請新的記憶體。這樣做的乙個顯著優點是,使得記憶體分配效率得到提公升。2 執行緒池是一種多執行緒處理形式,處理過程中將任務新...