MemPool

Inherited from NULL

Inherited by NULL

Description

负责从系统中申请内存,建立内存池,根据需要从内存池分配内存,管理内存池。
内存池由若干个相同大小的内存片(Chunk)组成,在创建内存池对象时,仅创建一个Chunk,在后面的内存分配中,如果这个Chunk的空间已经用尽,将创建一个新的Chunk并添加到Chunk链表中。Chunk的尺寸是内存池的固有属性,仅可以在构造函数中指定。一个Chunk是一块连续内存,不同Chunk之间不需要连续。从内存池中申请的内存返回内存池之后,该内存成为Chunk的一个内存块(Block),并且根据Block的大小将该内存地址添加到对应的可重分配内存块链表(Reallocatable Block List,RBL)中。RBL存储在第一个Chunk中,增加的Chunk仅在Chunk的头部存储下一个Chunk的首地址。内存池会记录未分配区域的首地址,申请内存时首先从RBL中寻找,如果该链表为空,则从内存池的未分配区域分配。
K2中的内存池有两种使用模式,一种是变长模式,指内存池中有多种长度的Block,申请和返回内存时会根据给定的长度与不小于该长度的最小Block长度取齐;大于最大Block长度(32位操作系统时为4096 Byte)的内存将直接从系统申请或返回给系统。另一种是定长模式,指内存池中只有一种长度的Block,每次分配内存时均按照该Block的长度来分配。为区别于变长模式下的内存块(Block),以后称定长模式下的内存块(Block)为内存单元(Unit)。

Members

Public interface

m_ulChunkSize