1 上次的實現中,有個嚴重的bug:
???就是在T* Chunk<T>::allocate(const size_type num)中為num>1去搜索連續塊的循環中,在找到連續區塊之后的處理,沒有考慮找到的區塊就是pFirst所指的區塊的情況。

2 把實現改成了把連續區塊區分為只能包含一個T的single單元和可以包含">1"個T的linear單元,它們的區分由一個位來標識,當是linear單元時,第一個單元有一份 next,其第二個單元中含有整個liinear快的單元總數unsigned int linearSize, 由于需要把類型標識與next涵在某個類型中,所以next不再是指針,而是下標,此時next的范圍在[0, 2^31), 尋址范圍為2G,是足夠使用了,看這里:
???union Block{
????? unsigned char e[sizeof(T)];
????? unsigned int linearSize;
????? struct {
??????? bool s: 1;???// bitfield
??????? unsigned int v: 31;
????? } next;
??? } data_[MAX];

work summary:?
???經過對分配單元的簡單分類,省去了一部分較費時的線性搜索,引來了較復雜的邏輯判斷,接下來的工作就是找出冗余的判斷并消減掉,重要的是不斷的測試。

改進后的代碼在這里? :)

最近網絡阻塞嚴重,想聯系我的朋友們!發郵件到cyberzeister@gmail.com