c 結構體對齊

2021-08-15 20:32:20 字數 805 閱讀 2516

1、(當前偏移量+當前填充數)%當前變數大小=0

2、(總偏移大小+末尾填充數)%最寬變數大小=0

必須先滿足1、再滿足2。例如

**如下:

struct a;

// 由上可知(總偏移量(4+1+1+2)+末尾補數0)%最寬變數大小4=0。所以sizeof(a)=8。即4+(1+1)+2=8

快速記憶:4+(1+1)+2=8

struct b;

// 由上可知(總偏移量(1+3+4+2)+末尾補數2)%最寬變數大小4=0。所以sizeof(b)=12。即(1+3)+4+(2+2)=12

快速統計:(1+3)+4+(2+2)=12

struct c;

// 由上可知(總偏移量(2+1+1+4)+末尾補數0)%最寬變數大小4=0。所以sizeof(c)=8。即2+(1+1)+4=8

快速統計:2+(1+1)+4=8

struct d;

// 由上可知(總偏移量(4+2+1)+末尾補數1)%最寬變數大小4=0。所以sizeof(d)=8。即4+2+(1+1)=8

快速統計:4+2+(1+1)=8

int as = sizeof(a);// sizeof(a)=8

int bs = sizeof(b);// sizeof(b)=12

int cs = sizeof(c);// sizeof(c)=8

int cd = sizeof(d);// sizeof(d)=8

};參考:

C語言 結構體struct 結構體對齊

1 定義乙個結構體 順便例項結構體變數 struct tag 結構體型別名 struct tag 這兩者共同構成了結構體型別 單獨的tag 結構體型別名 不能稱之為結構體型別 結構體變數名 2 定義的同時使用typedef 相當於定義結構體 為結構體起新名字 typedef struct tag 結...

c語言 結構體對齊

1 編譯器是按照什麼樣的原則進行對齊的?a.資料型別自身的對齊值 對於char型資料,其自身對齊值為1,對於short型為2,對於int,float,double型別,其自身對齊值為4,單位位元組。b.結構體或者類的自身對齊值 其成員中自身對齊值最大的那個值。c.指定對齊值 pragma pack ...

C語言結構體對齊

解析c語言結構體對齊 記憶體對齊問題 c語言結構體對齊也是老生常談的話題了。基本上是面試題的必考題。內容雖然很基礎,但一不小心就會弄錯。寫出乙個struct,然後sizeof,你會不會經常對結果感到奇怪?sizeof的結果往往都比你宣告的變數總長度要大,這是怎麼回事呢?開始學的時候,也被此類問題困擾...