原文出處:
在高效c++程式設計中看到乙個不錯的記憶體池實現方案,這裡共享下,大家看看有什麼不足。
**很簡單,如下:
template
class cmemorypool
;cmemorypool(unsigned int nitemcount = expansion_size)
~cmemorypool()
}void* alloc(unsigned int /*size*/)
//get free memory from head
cmemorypool* phead = m_pfreelist;
m_pfreelist = m_pfreelist->m_pfreelist;
return phead;
}void free(void* p)
protected:
//allocate memory and push to the list
void expandfreelist(unsigned nitemcount = expansion_size)
plastitem->m_pfreelist = null;
}private:
cmemorypool* m_pfreelist;
};它的實現思想就是每次從list的頭上取記憶體, 如果取不到則重新分配一定數量; 用完後把內存放回list頭部,這樣的話效率很高,因為每次list上可以取到的話,肯定是空閒的記憶體。
當然上面的**只是針對單執行緒的,要支援多執行緒的話也很簡單,外面加一層就可以了,
**如下:
class ccriticalsection
~ccriticalsection()
void lock()
void unlock()
protected:
critical_section m_cs;
};template
class cmtmemorypool
void free(void* p)
private:
pooltype m_pool;
locktype m_lock;
};這是我的測試**:
#include
#include
using namespace std;
#include "memorypool.h"
#include "mtmemorypool.h"
class ctest
void operator delete(void* p, size_t size)
static void newpool()
static void deletepool()
//static cmemorypool* s_pool;
static cmtmemorypool, ccriticalsection>* s_pool;
};//cmemorypool* ctest::s_pool = null;
cmtmemorypool, ccriticalsection>* ctest::s_pool = null;
void testfun()
system("pause");
return 0;
}在我機器上測試結果比系統預設的crt實現高效n倍。
C 實現乙個簡單記憶體池
在使用記憶體池進行記憶體管理之前,通常使用new malloc或者delete free來申請或者釋放記憶體。在這個過程中,系統要首先查詢內部維護的記憶體空閒塊表,並且需要根據比如lru等記憶體分配演算法找到合適大小的空閒記憶體塊。如果該空閒記憶體塊過大,還需要切割成已分配的部分和較小的空閒塊。然後...
乙個簡單記憶體池實現
最近面試被問了乙個記憶體池的實現,關鍵是記憶體塊的組織,說來慚愧,由於之前沒有詳細去了解過實現,只記得作業系統上有說過空閒鍊錶的實現,即按分配的塊用鍊錶鏈結,有小塊優先,大塊優先等 後來回來認真地找了幾個記憶體池實現的技術介紹,多數是以乙個固定塊,每個塊又有固定長度的單元組成。參考了網上的一些實現方...
乙個簡單的記憶體池
為什仫要使用記憶體池?1.通常我們用new delete和malloc free來管理記憶體,可能會需要頻繁的呼叫記憶體,減少執行時間,增加效率.2.避免記憶體碎片 傳統的new delete的弊端 1.分配記憶體時要檢視空閒分割槽表,根據一定的演算法來分配,比如最佳適應演算法,最差適應演算法.然後...