C 中乙個高效的記憶體池實現

2021-06-25 21:42:37 字數 1645 閱讀 7794

原文出處:

在高效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.分配記憶體時要檢視空閒分割槽表,根據一定的演算法來分配,比如最佳適應演算法,最差適應演算法.然後...