C++内存优化:二级间接索引模式内存池2013-04-20.H内容如下:
/********************************************************* 在一些不确定内存总占用量的情形下,频繁的使用new申请内存,再通过链表 进行索引似乎是很常规的做法。自然,也很难做到随机定位。 下面的内存池类是用二层索引表来对内存进行大块划分,任何一个块均只需索 引3次即可定位。 索引数量,每索引块的分配单元数量,以及分配单元的字节长度均需为2的整数 次幂(为了运算时的效率)//by:www.datahf.net zhangyu(zhangyu.blog.51cto.com) *********************************************************/class MemTable { public: MemTable(void); public: ~MemTable(void); public: void CREATE(MemTableIn *in_m);void DEL(); LPSTR NEW();//分配一个unit LPSTR NEW_CONTINUEOUS(UINT n);//用于连续分配若干个unit UINT NEW(UINT n); //用于可碎片方式分配若干个unit LPSTR GET(UINT n);//用来获得第n个分配的指针地址 int get_totle_unitnum(); public: MemTableIn in; LPSTR **pDouble_Indirect; LPSTR lpBitmap; LPSTR *pIndirect; LPSTR m_lpFirstFree; int nFree[3];//0表示二级索引的自由,1表示1级索引的自由,2表示块自由索引号 INT32 m_EndBlkUseredUnits; int m_Vblkbytes; UINT m_UnitTotalNum; UINT m_log2Rindexs,m_log2Runits,m_log2Rbitmap,m_log2Lindexs,m_log2Lunits,m_log2Lbitmap; UINT m_log2UnitBytes; UINT m_index2ID,m_index1ID,m_UnitID; };