struct s ;
那麼sizeof(s) = 4
先說下位域在記憶體對齊的一些規則:
2.位域的多少定義多少就後面接多少位,但是位域要求是連續的位元組,像a已經占有4位了,乙個位元組8位,那麼就會填補4位,到下個位元組,所以到b變數占用的是另個一新位元組。
3.對於一些資料說位域不能跨兩個位元組,就是說位域長度不能超過8,但是我試過int b:30都沒問題,像下面的
struct s ;
sizeof(s) = 4;
我覺得還是可以的,有不同意見的朋友歡迎提出,希望大家共同交流下;
最後提醒一下,如果定義的是int b:20;那麼最後結果還是要補全到4位元組的
c語言位元組對齊問題(一)
在這裡只總結結構體的位元組對齊問題,看下面的結構體 struct s1 char a int b short c struct s2 char a short c int b 那麼sizeof s1 12,sizeof s1 8 我們可以假定結構體在記憶體中的位址是0x0000開始的,那麼我們說的位...
C語言位元組對齊問題詳解
引言 考慮下面的結構體定義 typedef struct t foo int main void 複製 執行後輸出 c1 0,s 2,c2 4,i 8為什麼會這樣?這就是位元組對齊導致的問題。一 什麼是位元組對齊 現代計算機中,記憶體空間按照位元組劃分,理論上可以從任何起始位址訪問任意型別的變數。但...
c語言位元組對齊
現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。基本資料型別自身對齊,也叫自然對齊。就是說...