内存池(MemPool)技术详解

  • Post author:
  • Post category:其他



本文已经迁移到:

http://cpp.winxgui.com/cn:dive-into-memory-pool


概述

内存池(MemPool)技术备受推崇。我用google搜索了下,没有找到比较详细的原理性的文章,故此补充一个。另外,补充了boost::pool组件与经典MemPool的差异。同时也描述了MemPool在sgi-stl/stlport中的运用。

经典的内存池技术

经典的内存池(MemPool)技术,是一种用于分配大量大小相同的小对象的技术。通过该技术可以极大加快内存分配/释放过程。下面我们详细解释其中的奥妙。
经典的内存池只涉及两个常量:MemBlockSize、ItemSize(小对象的大小,但不能小于指针的大小,在32位平台也就是不能小于4字节),以及两个指针变量MemBlockHeader、FreeNodeHeader。开始,这两个指针均为空。

class


MemPool

{




private


:


const




int


m_nMemBlockSize;



const




int


m_nItemSize;






struct


_FreeNode {


_FreeNode


*


pPrev;


BYTE data[m_nItemSize – sizeof(_FreeNode*)];

};


struct


_MemBlock {


_MemBlock


*


pPrev;

_FreeNode data[m_nMemBlockSize/m_nItemSize];

};





版权声明:本文为xushiweizh原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。