本章介绍了一个小型对象分配器.
因为过多的小型对象( 例如仿函数, 智能指针)的分配释放, 会导致内存碎片, 内存耗费过多, 分配速度过慢等问题。 故而在需要大量小型对象的系统中, 一个分配器是非常必要的。
本章介绍的这个分配策略共由四层组成, 第一层是Chunk , 一块大内存。 一个Chunk可以分配最多255个小型对象。 Chunk内的可用内存, 通过一个链表连接起来。
第二层是FixedAllocator. 这层封装了Chunk的行为,由一个Chunk的数组构成(vector). 当一个Chunk满了之后,会添加新的Chunk。FixedAllocator定义了Chunk的大小。
第三层SmallObjAllocator由数个大小不同的FixedAllocator组成。 以为不同大小的小对象分配内存。 同时, 如果分配的内存大于某个特定值,就将分配策略转出,例如调用::new.
第四层SmallObject. 将SmallObjAllocator封装为一个Singleton. 任何需要应用这个分配策略的对象只需要从SmallObject派生, 就可以应用SmallObject定义的new, delete. 达到使用这个分配策略的目的。 利用第一章提供的policy的办法, SmallObject还继承了线程策略,故而可以实现各种不同的线程要求。
总之, 这章介绍了一个非常棒的内存分配器, 当需要自己写一个内存分配器的时候, 这将是一个非常不错的参考, 考虑到了方方面面。