📄 cmempool.cpp
字号:
/********************************************************************
created: 2006/10/31
created: 31:10:2006 21:10
filename: d:\Gs\mempool\mempool\CMemPool.cpp
file path: d:\Gs\mempool\mempool
file base: CMemPool
file ext: cpp
author: Zhang Li
purpose:
*********************************************************************/
#include "CMemPool.h"
#define MEMPOOL_ALLOC(x) if (m_currentBlock##x != NULL)\
{\
p = m_currentBlock##x;\
m_currentBlock##x = m_currentBlock##x->m_prev;\
}
#define MEMPOOL_FREE(x) {\
memBlock<x> *mp = (memBlock<x>*)p;\
mp->m_prev = NULL;\
m_memHead##x->m_prev = mp;\
m_memHead##x = mp;\
}
#define MEMPOOL_INIT(x) m_memHead##x = (memBlock<x>*)malloc(sizeof(memBlock<x>));\
m_memHead##x->m_prev = NULL;\
m_currentBlock##x = m_memHead##x;\
for (int i = 0; i < 512; ++i)\
{\
memBlock<x> *p = (memBlock<x>*)malloc(sizeof(memBlock<x>));\
p->m_prev = m_currentBlock##x;\
m_currentBlock##x = p;\
}
#define MEMPOOL_RELEASE(x) while(m_currentBlock##x != NULL)\
{\
memBlock<x> *p = m_currentBlock##x;\
m_currentBlock##x = m_currentBlock##x->m_prev;\
free(p);\
}
#define MEMPOOL_LOCK Lock lock;
CMemPool *CMemPool::m_MemPool = NULL;
CRITICAL_SECTION CMemPool::cs;
CMemPool::CMemPool()
{
MEMPOOL_LOCK
MEMPOOL_INIT(32)
MEMPOOL_INIT(64)
MEMPOOL_INIT(96)
MEMPOOL_INIT(128)
MEMPOOL_INIT(160)
MEMPOOL_INIT(192)
MEMPOOL_INIT(224)
MEMPOOL_INIT(256)
}
void CMemPool::Release()
{
MEMPOOL_LOCK
MEMPOOL_RELEASE(32)
MEMPOOL_RELEASE(64)
MEMPOOL_RELEASE(96)
MEMPOOL_RELEASE(128)
MEMPOOL_RELEASE(160)
MEMPOOL_RELEASE(192)
MEMPOOL_RELEASE(224)
MEMPOOL_RELEASE(256)
delete m_MemPool;
m_MemPool = NULL;
}
void CMemPool::_free(void *&p, unsigned int size)
{
MEMPOOL_LOCK
if (NULL == p)
{
return;
}
unsigned int AllocSize = size + 4;
if (AllocSize% 32 != 0)
{
AllocSize += 32;
}
switch(AllocSize - (AllocSize % 32))
{
case 32:
MEMPOOL_FREE(32)
break;
case 64:
MEMPOOL_FREE(64)
break;
case 96:
MEMPOOL_FREE(96)
break;
case 128:
MEMPOOL_FREE(128)
break;
case 160:
MEMPOOL_FREE(160)
break;
case 192:
MEMPOOL_FREE(192)
break;
case 224:
MEMPOOL_FREE(224)
break;
case 256:
MEMPOOL_FREE(256)
break;
default:
free(p);
p = NULL;
}
p = NULL;
}
void *CMemPool::_alloc(unsigned int size)
{
MEMPOOL_LOCK
unsigned int AllocSize = size + 4;
if (AllocSize% 32 != 0)
{
AllocSize += 32;
}
void *p = NULL;
switch(AllocSize - (AllocSize % 32))
{
case 32:
MEMPOOL_ALLOC(32)
break;
case 64:
MEMPOOL_ALLOC(64)
break;
case 96:
MEMPOOL_ALLOC(96)
break;
case 128:
MEMPOOL_ALLOC(128)
break;
case 160:
MEMPOOL_ALLOC(160)
break;
case 192:
MEMPOOL_ALLOC(192)
break;
case 224:
MEMPOOL_ALLOC(224)
break;
case 256:
MEMPOOL_ALLOC(256)
break;
default:
return malloc(size);
}
return p;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -