📄 fsa.h
字号:
/*
Fixed Size Allocator
Date:
2002/03/05
Note:
皋葛府 且寸/秦力俊 靛绰 厚侩(Cost)苞 窜祈拳(Fragmentation)甫 临捞扁 困茄 努贰胶
*/
#ifndef __ORZ_MEMORY_ALLOCATOR__
#define __ORZ_MEMORY_ALLOCATOR__
template< class T >
class CFixedSizeAllocator
{
public:
class CMemBlock
{
public:
T tData;
CMemBlock *pNext;
};
protected:
CMemBlock * m_pMemory;
CMemBlock * m_pFirstFree;
int m_nCapacity;
public:
CFixedSizeAllocator( int nCapacity );
virtual ~CFixedSizeAllocator();
T * Alloc();
void Free( T *pMemory );
protected:
void ConstructFreeList( int nFrom, int nTo );
};
template< class T >
CFixedSizeAllocator< T >::CFixedSizeAllocator( int nCapacity )
: m_nCapacity( nCapacity )
{
m_pMemory = new CMemBlock[ nCapacity ];
if ( !m_pMemory )
m_nCapacity = 0;
ConstructFreeList( 0, m_nCapacity );
}
template< class T >
CFixedSizeAllocator< T >::~CFixedSizeAllocator()
{
if ( m_pMemory )
delete[] m_pMemory;
}
template< class T >
T * CFixedSizeAllocator< T >::Alloc()
{
if ( !m_pFirstFree )
return NULL;
CMemBlock *pBlock = m_pFirstFree;
m_pFirstFree = pBlock->pNext;
return (T *) pBlock;
}
template< class T >
void CFixedSizeAllocator< T >::Free( T *pMemory )
{
CMemBlock *pBlock = (CMemBlock *) pMemory;
pBlock->pNext = m_pFirstFree;
m_pFirstFree = pBlock;
}
template< class T >
void CFixedSizeAllocator< T >::ConstructFreeList( int nFrom, int nTo )
{
CMemBlock *pBaseMemory = &m_pMemory[nFrom];
m_pFirstFree = pBaseMemory;
for ( int i = nFrom + 1; i < nTo; i++ )
{
pBaseMemory->pNext = pBaseMemory + 1;
pBaseMemory++;
}
pBaseMemory->pNext = NULL;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -