天天看點

SGI STL空間擴充卡freelist設計

今天重新看了《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