用來(lái)在巨量對(duì)象情況下管理內(nèi)存。為之取名chunk allocator.
原理很簡(jiǎn)單,一個(gè)chunk就是一個(gè)連續(xù)的“內(nèi)存空閑區(qū)”,大小固定,包含有一批對(duì)象的存儲(chǔ)空間,如下:
template<typename T, int MAX> struct Chunk {
???union Block {
??????unsigned char e[sizeof(T)];???// 對(duì)象數(shù)據(jù)
??????Block* next;
???} data_[MAX];

???void init();
???void destroy();

???T* allocate(int num);
???void deallocate(T* p, int num);

???//...
};

然后在chunk allocator中有一個(gè)Chunk列表:
typedef Chunk<T,defautlSize> ChunkType;
typedef std::vector<ChunkType*> ChunkTableType;
ChunkTableType chunkTable_;
當(dāng)一個(gè)Chunk中不夠分配一個(gè)連續(xù)區(qū)時(shí),會(huì)向chunkTable_加入一個(gè)新的Chunk,并且向這個(gè)新的Chunk請(qǐng)求分配。

詳細(xì)的看文件里面,其本分配策略還有待改進(jìn),比如:記下最大可用連續(xù)區(qū)塊的大小,有可能的話(huà)把這樣的信息存儲(chǔ)在空閑區(qū)塊上,還可以使data_[MAX]保持首地址對(duì)齊,即機(jī)器字的n倍,使尋址操作加快。

希望有人找到bug后通知我,msn/mail: cyberzei@hotmail.com? :)