c++内存池的实现(可以new复杂对象)

/*
    使用说明:
            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*>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值