?? memorypoolbase.h
字號:
// MemoryPoolBase.h: interface for the CMemoryPoolBase class.
// Memory Pool Management Class version 1.0
// source code created by Min-Wook Kim (taiyo@webzen.co.kr)
// 2004-7-26
//
//-------------------------------------------------------------------
// History.
// 2004-3-31 : MemoryPoolTempl class ver 0.1
// 2004-6-18 : MemoryPoolTempl class ver 0.2
// 2004-6-21 : Error Check Byte added ver 0.21
// 2004-7-26 : MemoryPool Framework ver1.0
// Be Done
// - MemoryPool template class of inherited-method and factory-method
// - Multi-thread safety
// - Buffer overflow write check
// To do
// - Analysis of amount used for band
//-------------------------------------------------------------------
// example)
//
// class Money1 : public CMemoryPoolBase<Money1> { ... };
//
// void main()
// {
// Money1::Initialize(sizeof(Money1), 3, 2);
//
// Money1 * pmoney1 = new Money1;
// delete pmoney1;
//
// Money1::Release();
// }
//
//////////////////////////////////////////////////////////////////////
#ifndef __MEMORYPOOLBAES_H__
#define __MEMORYPOOLBAES_H__
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "MemBand.h"
namespace util
{
template<class Type>
class CMemoryPoolBase : public CMemBand<Type>
{
public:
static void Initialize(DWORD dwObjSize, DWORD dwPoolBasicSize, DWORD dwPoolExtendSize)
{
//#ifdef _PSDK_INSTALLED
// InitializeCriticalSectionAndSpinCount(&m_cs, 2000);
//#else
InitializeCriticalSection(&m_cs);
//#endif
InitBand( dwObjSize, dwPoolBasicSize, dwPoolExtendSize );
}
static void Release()
{
//CMemBand::FreeBand();
FreeBand();
DeleteCriticalSection(&m_cs);
}
void * operator new( size_t size )
{
Lock();
void * pn = (void *)AllocObject();
Unlock();
return pn;
}
void operator delete( void * p )
{
if(!p) return;
Lock();
#ifdef _DEBUG
BOOL rt = FreeObject((void *)p);
TASSERT(rt);
#else
FreeNode((void *)p);
#endif
Unlock();
}
protected:
static void Lock() { EnterCriticalSection(&m_cs); }
static void Unlock() { LeaveCriticalSection(&m_cs); }
static CRITICAL_SECTION m_cs;
};
template<class Type> CRITICAL_SECTION CMemoryPoolBase<Type>::m_cs;
} /// namespace util
#endif //__MEMORYPOOLBAES_H__
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -