简单内存池设计
關(guān)鍵詞 內(nèi)存池 鏈表
class A { public:static void* operator new(size_t size);static void operator delete(void* phead);static int m_iCout;//分配計數(shù)統(tǒng)計,每new一次,就統(tǒng)計一次static int m_iMallocCount;//每次malloc一次,統(tǒng)計一次private:A* next;static A* m_FreePost;//總是指向一塊可以分配出內(nèi)存的首地址static int m_sTrunkCout;//一次分配多少倍的該類內(nèi)存 };int A::m_iCout = 0; int A::m_iMallocCount = 0; A* A::m_FreePost = nullptr; int A::m_sTrunkCout = 5;//一次分配五倍的該類內(nèi)存作為內(nèi)存池的大小void* A::operator new(size_t size) {A* temp;if (m_FreePost == nullptr){//申請一大塊內(nèi)存size_t realsize = m_sTrunkCout * size;//傳動new調(diào)用的是系統(tǒng)傳遞的mallocm_FreePost = reinterpret_cast<A*>(new char[realsize]);temp = m_FreePost;//把分配出來的一大塊內(nèi)存,彼此關(guān)聯(lián)起來,供后續(xù)使用for (; temp != &m_FreePost[m_sTrunkCout - 1]; ++temp){temp->next = temp + 1;}temp->next = nullptr;++m_iMallocCount;}temp = m_FreePost;m_FreePost = m_FreePost->next;//更新可用內(nèi)存塊地址++m_iCout;return temp;}void A::operator delete(void* phead) {(static_cast<A*>(phead)->next) = m_FreePost;m_FreePost = static_cast<A*>(phead); }?
總結(jié)
- 上一篇: 安卓自启软件管理(安卓自启软件)
- 下一篇: LeetCode 面试题55 二叉树的深