c語言位元組對齊問題(二)

2021-06-27 01:10:11 字數 344 閱讀 9193

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劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。基本資料型別自身對齊,也叫自然對齊。就是說...