結構體和聯合的記憶體對齊

2021-09-27 11:47:04 字數 541 閱讀 4304

條件為32位作業系統,編譯4位元組對齊。

// 區域性對齊原則:每一成員需對齊為後一成員型別的倍數

// 整體補齊原則:最終大小補齊為成員型別最大值的倍數

struct a

;struct b

如題紀念一下曾經踩過這麼乙個不應該踩的坑

話不多說先上**

union data

s;//8

int x;

//4int y;

//4}d;

d.x =1;

d.y =2;

d.s.x = d.x * d.x;

d.s.y = d.y + d.y;

cout << d.s.x <<

","<< d.s.y << endl;

//列印結果:4 8

這裡涉及到union聯合的記憶體分配問題,union總的記憶體大小就是成員所佔記憶體最大的成員記憶體大小;

給出上述程式**的記憶體結構

混合記憶體對齊

結構體對齊(記憶體對齊

有的時候,在腦海中停頓了很久的 顯而易見 的東西,其實根本上就是錯誤的。就拿下面的問題來看 structt 使用sizeof t 將得到什麼樣的答案呢?要是以前,想都不用想,在32位機中,int是4個位元組,char是1個位元組,所以t一共是5個位元組。實踐出真知,在vc6中測試了下,答案確實8個位...

記憶體對齊 結構體對齊

現在已知32位機器上各種資料型別的長度如下 char 1 有符號無符號同 short 2 有符號無符號同 int 4 有符號無符號同 long 4 有符號無符號同 float 4 double 8 重要規則 1,複雜型別中各個成員按照它們被宣告的順序在記憶體中順序儲存,第乙個成員的位址和整個型別的位...

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

編譯器按照成員列表的順序乙個接乙個地給每個成員分配記憶體。只有當儲存成員時需要滿足正確的邊界對齊要求時,成員時間才可能出現用於填充的額外記憶體空間。系統禁止編譯器在乙個結構的起始位置跳過幾個位元組來滿足邊界對齊要求,因此所有結構的起始位置必須是結構中邊界要求最嚴格的資料所要求的位置。這段話來自 c和...