WEB开发网
开发学院软件开发C++ c++优化自适应内存池 阅读

c++优化自适应内存池

 2012-11-22 14:48:38 来源:WEB开发网   
核心提示:// RecoverPool.h: interface for the RecoverPool class.回收池//一种节约内存的内存池//主要机理://要使用内存,new出来,c++优化自适应内存池,直接放入池内//释放时不delete,而是标记为回收,直接放入池内 释放时不delete,而是标记为
// RecoverPool.h: interface for the RecoverPool class.
//
//	回收池
//	一种节约内存的内存池
//	主要机理:
//		要使用内存,new出来,直接放入池内
//		释放时不delete,而是标记为回收,供下次相同大小的内存申请时使用,循环使用
//
//  内存池
//		1次性申请n块大小相同的内存,等待分配
//		如果一开始申请10000块,而实际只是前面100块内存在循环利用,那就很浪费内存了
//  回收池
//      1次申请1块内存,用完回收,循环利用,如果回收前,又有内存申请,则再申请1块
//		内存使用率比内存池小的多
//////////////////////////////////////////////////////////////////////

#if !defined RECOVERPOOL_H
#define RECOVERPOOL_H

#include <map>
#define POOL_SIZE (4)
#define NEXT_POOL (POOL_SIZE - 1)
class RecoverPool  
{
	enum MemInfo
	{
		state = 1,
		prekeep = 1,
		index = 2,
		blockAddr = 8,
		blockSize = 4,
		unknow = 0,
	};
public:
	RecoverPool();
	virtual ~RecoverPool();
	
public:
	void* Alloc( int objectSize, int arraySize = 1 );
	void Free( void *pObject, bool isArray = false );
	void Release();
		
private:
	void *AllocFromArray( int size, unsigned long *pArrayPool, bool isArray );
	void ReleaseArray(unsigned long *pArrayPool);
private:
	/*
		key可分配对象的大小,value地址数组,保存new出来的地址
		第一个元素为数组中,已使用数量,最小为2(元素0与最后1个元素,共2个已经使用地址)
		最后一个元素为,下一个数组的地址
	 */
	std::map<unsigned int, void*> m_poolMap;
};

#endif // !defined(RECOVERPOOL_H)

要使用内存,new出来,直接放入池内
释放时不delete,而是标记为回收,供下次相同大小的内存申请时使用,循环使用

Tags:优化 适应 内存

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接