mempool.cpp

来自「内存池技术的一个展示」· C++ 代码 · 共 103 行

CPP
103
字号
#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 + =
减小字号Ctrl + -
显示快捷键?