(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 執行緒池是一種多執行緒處理形式,處理過程中將任務新...