stl第二級空間配置器中,自由鍊錶的節點結構如下:
union obj;
書上給的解釋是這樣的:「上述obj所用用的是union,由於union之故,從其第一欄位觀之,obj可被視為—個指標,指向相同形式的另乙個obj。從其第二欄位觀之,obj可被視為乙個指標,指向實際區塊。一物二用的結果是,不會為了維
護煉表所必須的指標而造成記憶體的另一種浪費。」
第一句話很好理解,在此就不再贅述,本文將**的重點放在第二句話,即其為何指向實際區塊。
現在看下面一段**的執行結果
如圖所示,指標p所存的位址為0x008ff7a0即為陣列m1首元素位址,同時data首元素位址與陣列m首元素位址相同。
對此,我的理解是:此時test = (union obj*)m;使得test指向陣列m所在空間,則data[0]所佔空間為m[0]所佔空間,於是data所指空間即為m所指空間。
由上述可知在第二級空間配置器中,自由鍊錶某節點client_data所指位址即為該區塊首位址。
STL之vector學習筆記
參考sgi stl 及 侯捷 stl原始碼剖析 概述 vector是動態空間,隨著元素的加入,它的內部機制會自行擴充空間以容納新元素。但是它不是單純地 配置新空間 資料移動 釋放舊空間,它實際配置的大小會比客戶需求要大一點定義 sgi stl的vector實現於stl vector.h中,而不是ve...
STL學習筆記之union obj
最近看stl原始碼剖析時遇到了乙個有趣union的用法,簡單談談自己的看法 stl第二級空間配置器中,自由鍊錶的節點結構如下 union obj 書上給的解釋是這樣的 上述obj所用用的是union,由於union之故,從其第一欄位觀之,obj可被視為 個指標,指向相同形式的另乙個obj。從其第二欄...
STL 學習筆記 之 函式物件
c stl,三大核心元件 containers,iterators以及algorithms,即容器,迭代器和演算法。另外還一種重要元件,即函式物件 functionobject r 函式物件又稱為仿函式 functor 函式物件其實就是乙個行為類似函式的 東西 它可以沒有引數,也可以帶有若干引數,其...