/*
使用说明:
1>.四个接口Malloc()/Free()/Mempool_new()/Mempool_delete()分别对应标准库函数malloc()/free()和操作符new()/delete()
2>.如果是qt项目请打开#define QT宏定义
3>.如果是win32项目则默认就可以
4>.如果是linux c/c++(非第三方类库)请用pthread实现一个_Lock类替换
注意事项:
1>.接口Mempool_new是类似于系统调用new的接口,但是由于对象构造函数这里只实现到0~4个参数,如果超过则需修改本类模板,添加更多参数的构造实现.
2>.构造函数的参数类型如果存在volatile/const等修饰,则同样需要自己实现一个.
举 例:
CMemoryPool<std::List> myMemPool;
std::List* pLst = myMemPool.Mempool_new();//复杂对象,会调用其构造.
struct mySimpleStruct* pStru = myMemPool.Malloc(sizeof(mySimpleStruct));//简单对象.
*/
#ifndef MEMORYPOOL_HPP
#define MEMORYPOOL_HPP
//#define QT //加入到windows项目或者其他项目的开关
#include <deque>
#include <map>
#include <new>
#ifndef QT
#include <Windows.h>
#else
#include <QMutex>
#endif
using namespace std;
#define IN
#define OUT
#define MAX_BLOCK_TYPE 16
#define MAX_UNIT_NUM 1024
#ifndef QT
class _Lock
{
public:
_Lock(void)
{
InitializeCriticalSection(&m_csLock);
}
~_Lock(void)
{
DeleteCriticalSection(&m_csLock);
}
inline void Lock()
{
EnterCriticalSection(&m_csLock);
}
inline void UnLock()
{
LeaveCriticalSection(&m_csLock);
}
protected:
CRITICAL_SECTION m_csLock;
};
#else
class _Lock
{
public:
_Lock(void)
{
//do nothing
}
~_Lock(void)
{
//do nothing
}
inline void Lock()
{
m_mxLock.lock();
}
inline void UnLock()
{
m_mxLock.unlock();
}
protected:
QMutex m_mxLock;
};
#endif
typedef struct MEM_BLOCK
{
struct MEM_BLOCK *m_pNext;
_Lock m_csLock;
deque<char*>
c++内存池的实现(可以new复杂对象)
最新推荐文章于 2024-05-08 10:32:01 发布