STL學習筆記之union obj

2021-09-12 17:49:05 字數 912 閱讀 4666

最近看stl原始碼剖析時遇到了乙個有趣union的用法,簡單談談自己的看法

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所指位址即為該區塊首位址。

補充:書中描述為這樣:由於union之故,從其第一欄位觀之,obj可被視為乙個指標,指向相同形式的另乙個obj。從其第二欄位觀之,obj可被視為乙個指標,指向實際區塊。union的特性就是其記憶體空間為其成員中最長長度的整數倍,而且可作為成員中的任意一種型別來使用,他們共用同一塊記憶體空間。該聯合體第乙個欄位是指向下乙個union obj的指標,按32位位址空間算,其長度應該為4byte。第二個欄位是長度為1的乙個陣列,也就是1byte;看到這裡我就無法理解了,長度為一的陣列有什麼意義呢?看看下面的栗子:

char client_data;    /*此處的client_data是乙個char型變數*/

char client_data[1]; /*而此處client_data是乙個陣列的首位址*/

STL之vector學習筆記

參考sgi stl 及 侯捷 stl原始碼剖析 概述 vector是動態空間,隨著元素的加入,它的內部機制會自行擴充空間以容納新元素。但是它不是單純地 配置新空間 資料移動 釋放舊空間,它實際配置的大小會比客戶需求要大一點定義 sgi stl的vector實現於stl vector.h中,而不是ve...

STL學習筆記之union obj

stl第二級空間配置器中,自由鍊錶的節點結構如下 union obj 書上給的解釋是這樣的 上述obj所用用的是union,由於union之故,從其第一欄位觀之,obj可被視為 個指標,指向相同形式的另乙個obj。從其第二欄位觀之,obj可被視為乙個指標,指向實際區塊。一物二用的結果是,不會為了維 ...

STL 學習筆記 之 函式物件

c stl,三大核心元件 containers,iterators以及algorithms,即容器,迭代器和演算法。另外還一種重要元件,即函式物件 functionobject r 函式物件又稱為仿函式 functor 函式物件其實就是乙個行為類似函式的 東西 它可以沒有引數,也可以帶有若干引數,其...