本文已经迁移到:
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 版权协议,转载请附上原文出处链接和本声明。