首页
社区
课程
招聘
[原创]基于c++模板的通用内存池设计
发表于: 2013-8-29 15:42 6082

[原创]基于c++模板的通用内存池设计

2013-8-29 15:42
6082

编写了一个基于c++模板的通用内存池设计,上代码了。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 5
支持
分享
最新回复 (4)
雪    币: 129
活跃值: (2768)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我会说我要顶你嘛
2013-8-29 15:56
0
雪    币: 112
活跃值: (57)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
3
能给个调用例子么?

PS
/// 好像和模板没啥关系
// template <class T>
class CMemory

#ifndef CXX_MEMPOOL_H
#	define CXX_MEMPOOL_H 

#include <windows.h>

#include <memory>

#define FAILRST 0
#define SUCCRST 1

#define NUMZERO 0
#define NUMONE  1

#define INTSIZE		(sizeof(int))
#define POINTERSIZE (sizeof(void*))

#define MAXMEMLEN	4096*8  
#define MEMLENSTEP	8 
#define MEMCOUNT	(MAXMEMLEN/MEMLENSTEP)

#define GetNextMem(pMem)				((char*)(*(char**)((pMem) - POINTERSIZE)))
#define SetNextMem(pMem, pMemNext)		((*((char**)((pMem) - POINTERSIZE))) = (char*)pMemNext)
#define GetMemSize(pMem)				(*(int*)((pMem) - POINTERSIZE - INTSIZE))
#define SetMemSize(pMem, n)				(*(int*)((pMem) - POINTERSIZE - INTSIZE) = n)

class CMemMgr
{
public:
    void Unlock();

    ~CMemMgr(void);

    /*获取实例指针*/
    static CMemMgr *getInstance(void);

    /*外部调用者获取内存*/
    void *getMem(unsigned int uiMemLen);

    /*外部调用者归还内存*/
    int rtnMem(char *pMem);

private:
    void Lock();
    char**       m_szMemCtrl;        /*用于存放空闲内存的链表数组*/

    CMemMgr(void);
    CRITICAL_SECTION CriticalSesion;
};

/// 好像和模板没啥关系
// template <class T>
class CMemory
{
public:

	void * (operator new)(size_t iSize, LPCSTR lpszFileName, int nLine)
	{
		void * pMem = CMemMgr::getInstance()->getMem(iSize);
		return pMem;
	}

	void operator delete(void * pMem, LPCSTR lpszFileName, int nLine)
	{
		CMemMgr::getInstance()->rtnMem((char*)pMem);
	}

	void * (operator new[])(size_t iSize, LPCSTR lpszFileName, int nLine)
	{
		void * pMem = CMemMgr::getInstance()->getMem(iSize);
		return pMem;
	}

	void operator delete[](void * pMem, LPCSTR lpszFileName, int nLine)
	{
		CMemMgr::getInstance()->rtnMem((char*)pMem);
	}

	void *operator new( size_t iSize)
	{
		void * pMem = CMemMgr::getInstance()->getMem(iSize);
		return pMem;
	}

	void *operator new[]( size_t iSize)
	{
		void * pMem = CMemMgr::getInstance()->getMem(iSize);
		return pMem;
	}

	void operator delete( void * pMem, size_t )
	{
		CMemMgr::getInstance()->rtnMem((char*)pMem);
	}

	void operator delete[]( void * pMem, size_t )
	{
		CMemMgr::getInstance()->rtnMem((char*)pMem);
	}
};

#endif // #ifndef CXX_MEMPOOL_H
2013-8-29 21:47
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不解释   很厉害
2013-8-30 00:40
0
雪    币: 549
活跃值: (531)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
5
直接继承,呵呵
2013-8-30 09:31
0
游客
登录 | 注册 方可回帖
返回
//