結構體和共用體的記憶體對齊

2021-08-27 15:59:06 字數 969 閱讀 3007

編譯器按照成員列表的順序乙個接乙個地給每個成員分配記憶體。

只有當儲存成員時需要滿足正確的邊界對齊要求時,成員時間才可能出現用於填充的額外記憶體空間。

系統禁止編譯器在乙個結構的起始位置跳過幾個位元組來滿足邊界對齊要求,因此所有結構的起始位置必須是結構中邊界要求最嚴格的資料所要求的位置。

這段話來自 c和指標,意思是儲存結構體變數的位址必須是結構體最長元素的整數倍。

結構體巢狀結構體時的記憶體對齊還是以最長元素作為邊界對齊要求,而不是以結構體變數的長度:

可以發現,結構變數的首位址是4的整數倍,而不是的整數倍。

聯合體的對齊方式和結構體一樣

聯合體的長度是最長成員的長度

如果聯合體的成員是陣列並且陣列的長度是聯合體中是最長的,那麼聯合體的長度是陣列的長度,而不是單個陣列元素的長度;聯合體的成員是結構體變數並且結構體的長度是聯合體中是最長的,那麼聯合體的長度是結構體變數的長度而不是結構體成員變數的長度。

長度12

結構體變數的長度為12個位元組,在聯合體成員中是最長的,所以聯合體的大小12個位元組。按照4對齊(int型)

結構體內存對齊 和共用體

這個人寫得差不多了.關於結構體內存對齊 差不多一般的就 3條 自己算去吧 struct p1 struct p2 struct p3 struct p4 struct p5 全部算對應該 才開始啊.struct a struct b sizeof struct b 64位機器上是 32 首先 cha...

結構體和共用體 記憶體對齊原則

結構體 結構體 struct 是由一系列具有相同型別或不同型別的資料構成的資料集合。結構體變數所佔記憶體的長度是各個成員的總和,每個成員分別占有自己的儲存空間。關鍵字 struct。共用體 共用體 union 把幾種不同資料型別的變數存放在同一塊記憶體裡,共用體中的變數共享同一塊記憶體,後賦值的會覆...

結構體共用體占用空間區別 記憶體對齊

題目來自牛客網 在32位機器上 設有以下說明和定義 typedef union date struct data too date max 則語句 printf d sizeof struct data sizeof max 的執行結果是 52union 維護足夠的空間來置放多個資料成員中的 一種 ...