今天重新看了《STL源代碼剖析》,不禁要贊歎STL設計的經典。STL 的空間适配代碼設計的尤為精辟,不僅考慮到記憶體碎片的隐患,而且考慮到指針空間的節儉和複用,降低維護連結清單(lists)帶來額外的負擔。我們來看看如下代碼;
先看看STL的結構體,
obj 之是以用union,由于union之故,從其第一個字段觀之,obj可被視為一個指針,指向相同形式的另一個obj。從其第二個字段觀之,obj可被視為一個指針,指向實際區域。一物二用的結果是,不會為了維護連結清單所必須的指針而造成記憶體的另一種讓費。
看看如下示例代碼,你就發現它的設計精妙之處!
輸出如下:
----------------------------------------
address freelist:1819043176
address clentdata:143143000
143143080
143143040
143142960
address freelist:0
begin:143143080
begin:143143040
begin:143142960
begin:143143000