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

2021-05-09 06:39:54 字數 614 閱讀 7105

這些天經常在論壇上看到有人問關於結構體的sizeof的問題,要解答這個問題,首先就必須要了解位元組對齊的問題。下面就對此部分內容做乙個簡要的小結,方便以後查閱。(部分內容參考網上的資料,如有錯誤請讀者指正)。

首先我寫了如下一段計算結構體大小的**,測試一下我們所知道的理論是否和實際相同。

我對輸出的結果進行一下簡要的分析:

(1)第乙個為什麼輸出為1呢?試想乙個「不佔空間」的變數如何被取位址、兩個不同的「空結構體」變數又如何得以區分呢。於是,「空結構體」變數也得被儲存,這樣編譯器也就只能為其分配乙個位元組的空間用於佔位了。

(2)第二個為什麼輸出為40呢?1(乙個char)+7(padding bytes)+8(乙個double)+20(五個int,是5*4=20)+4(padding bytes)=40

(3)第二個為什麼輸出為32呢?1(乙個char)+4(b[5]中的乙個int)+3(padding bytes)+16(b[5]中其餘的四個int)+8(乙個double)=32

如果你對這幾個結果還有什麼疑問就請繼續往下看。

[part1:sizeof的定義及使用]

[part2:位元組對齊問題的**]

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

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

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

32位機器上定義如下結構體 struct xx int xx x5 1請問sizeof xx 的大小是 24 首先 x5是靜態變數可以不用管它 其次是要考慮位元組對齊的問題。對於結構體中沒有含有結構體變數的情況,有兩條原則 1 結構體變數中成員的偏移量必須是成員大小的整數倍 2 結構體的最終大小必須...

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 ...