用来在巨量对象情况下管理内存。为之取名chunk allocator.
原理很简单,一个chunk就是一个连续的“内存空闲区”,大小固定,包含有一批对象的存储空间,如下:
template<typename T, int MAX> struct Chunk {
union Block {
unsigned char e[sizeof(T)]; // 对象数据
Block* next;
} data_[MAX];
void init();
void destroy();
T* allocate(int num);
void deallocate(T* p, int num);
//...
};
然后在chunk allocator中有一个Chunk列表:
typedef Chunk<T,defautlSize> ChunkType;
typedef std::vector<ChunkType*> ChunkTableType;
ChunkTableType chunkTable_;
当一个Chunk中不够分配一个连续区时,会向chunkTable_加入一个新的Chunk,并且向这个新的Chunk请求分配。
详细的看
文件里面,其本分配策略还有待改进,比如:记下最大可用连续区块的大小,有可能的话把这样的信息存储在空闲区块上,还可以使data_[MAX]保持首地址对齐,即机器字的n倍,使寻址操作加快。
希望有人找到bug后通知我,msn/mail:
cyberzei@hotmail.com :)