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