1. 程式人生 > >c語言位元組對齊問題(二)

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

上一篇已經說了一些基本的struct成員變數的記憶體對齊的問題,現在來進一步看看位域在struct的運用,對減少記憶體的使用很用幫助,特別是在嵌入式領域。廢話不多說了,看下面結構體

struct s

{

     char  a:4;

     int      b:8;

     char  c:4;

};

那麼sizeof(s) = 4

先說下位域在記憶體對齊的一些規則:

1.聲名位域時,是緊接著上一個變數的記憶體地址後面的(當一個位元組內有剩餘空間時),不要求上一篇的“自然位元組對齊”,即記憶體地址%自身型別位元組=0

2.位域的多少定義多少就後面接多少位,但是位域要求是連續的位元組,像a已經佔有4位了,一個位元組8位,那麼就會填補4位,到下個位元組,所以到b變數佔用的是另個一新位元組。

3.對於一些資料說位域不能跨兩個位元組,就是說位域長度不能超過8,但是我試過int b:30都沒問題,像下面的

struct  s

{

       int b:30;

       int c:2; 

};

sizeof(s) = 4;

我覺得還是可以的,有不同意見的朋友歡迎提出,希望大家共同交流下;

最後提醒一下,如果定義的是int b:20;那麼最後結果還是要補全到4位元組的