转:C++内存池
#ifndef _MEMPOOL_H_ #define _MEMPOOL_H_ /* 本类封装了一个内存池,采用模板类, 模板参数就是内存池中分配的对象类型 本类主要用链表来实现,适用于固定大小的内存块分配 */ #include <vector> using std::vector; template<typename T> class CMemPool { struct _MemNode { _MemNode *pPrev; char data[sizeof(T) - sizeof(_MemNode*)]; }; struct _MemBlock { _MemBlock *pPrev; _MemNode *pNode; }; _MemBlock *m_pBlockHeader; //大内存块链表头指针 _MemNode *m_FreeNodeHeader; //空闲的小块头指针 int m_BlockSize; //当前小内存块数量 private: void AllocBlocks(); //分配内存块 void ReallocBlocks(); //扩大内存池大小 public: //构造函数,nInitSize为初始内存块数 CMemPool(int nInitSize = 128) : m_BlockSize(nInitSize), m_pBlockHeader