結構體sizeof 問題與位元組對齊

2022-09-05 09:57:11 字數 475 閱讀 1349

32位機器上定義如下結構體:

struct xx

;int xx::_x5;

1請問sizeof(xx)的大小是()//24

首先_x5是靜態變數可以不用管它

,其次是要考慮位元組對齊的問題。對於結構體中沒有含有結構體變數的情況,有兩條原則:

1)結構體變數中成員的偏移量必須是成員大小的整數倍;

2)結構體的最終大小必須是結構體最大簡單型別的整數倍

x1的偏移量是0,長度是8,符合;x2的偏移量是8,長度是1,符合;x3的偏移量是9,長度是4,不符合,需要在x2之後填充3位元組使得x3的偏移量達到12;x4的偏移量是16,長度是2,

符合;此時總長度為(8)+(1+3)+(4)+(2)=18,而最大簡單型別為long long長度為8,因此需要在x4之後再填充6位元組,使得總長度達到24可被8整除。因此sizeof(xx)的結果為24。

基於結構體sizeof的位元組對齊問題討論

這些天經常在論壇上看到有人問關於結構體的sizeof的問題,要解答這個問題,首先就必須要了解位元組對齊的問題。下面就對此部分內容做乙個簡要的小結,方便以後查閱。部分內容參考網上的資料,如有錯誤請讀者指正 首先我寫了如下一段計算結構體大小的 測試一下我們所知道的理論是否和實際相同。我對輸出的結果進行一...

位元組對齊 結構體變數的sizeof

首先回顧一下,32位與64位 指的是暫存器的位寬 作業系統下,不同資料型別所佔的位元組數 32位作業系統環境下 字元型 char 1 unsigned char 1 整型 int 4 unsigned int 4 short 2 unsigned short 2 long 4 unsigned lo...

sizeof計算結構體大小(位元組對齊)

引言 sizeof計算結構體的大小經常出現在筆試題中,接下來是對它的一些總結 pragma pack 8 struct s1 struct s2 求sizeof s2 的值?32位機 解 1.先看s1,a的有效對齊值為min 2,8 2,偏移量為0,0 2 0,符合 b的有效對齊值為min 4,8 ...