📄 mempool.cpp
字号:
#include "stdafx.h"
#define MAXSIZE 0x100000 //1MB
#define KSIZE 0x400 //1KB
typedef struct T_Pool
{
HANDEL head;
HANDEL startPos;
HANDEL endPos;
DWORD freeSize;
} POOL;
static POOL Pool;
static BYTE* PoolHead;
void CreatePool(void)
{
if( PoolHead==NULL)
{
PoolHead = (BYTE *)malloc( MAXSIZE*sizeof(BYTE) );
if( PoolHead==NULL )
{
printf("Malloc Failure!\n");
return ;
}
memset( PoolHead, 0, sizeof(PoolHead) );
Pool.head = (HANDEL)PoolHead; //
Pool.startPos = Pool.head;
Pool.endPos = (HANDEL)PoolHead + MAXSIZE;
Pool.freeSize = MAXSIZE;
}
else
return;
}
void DestroyPool( void )
{
if( PoolHead !=NULL )
{
free( PoolHead );
Pool.head = 0;
Pool.startPos = 0;
Pool.endPos = 0;
Pool.freeSize = 0;
}
}
void *PVMallocFrPool( UINT nSize )
{
void *pRet;
UINT size =0;
if( nSize%KSIZE == 0 )
size = nSize;
else
size = (nSize/KSIZE+1)*KSIZE;
pRet = (void *)Pool.startPos; //
Pool.startPos += size;
Pool.freeSize -= size;
return pRet;
}
void *PVMallocFrFreeSpace( UINT nSize )
{
return NULL;
}
void *PVMalloc( UINT nSize )
{
void* pRet;
if( nSize<=(Pool.endPos-Pool.startPos))
pRet =PVMallocFrPool( nSize );
// else if( nSize<=Pool.freeSize )
// pRet =PVMallocFrFreeSpace( nSize );
else
{
pRet =NULL;
printf("\nOut of MemPool!\n");
}
return pRet;
}
void TestMemPool( void )
{
printf(" === Pool Scan: === \n");
printf("Pool.head = 0x%08x\n", Pool.head );
printf("Pool.startPos = 0x%08x\n", Pool.startPos );
printf("Pool.endPos = 0x%08x\n", Pool.endPos );
printf("Pool.freeSize = 0x%08x\n", Pool.freeSize );
printf(" === End Scan !=== \n\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -