⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mempool.cpp

📁 内存池技术的一个展示
💻 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 + -