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,而是标记为回收,供下次相同大小的内存申请时使用,循环使用
更多精彩
赞助商链接
