c語言位元組對齊問題(二)
阿新 • • 發佈:2019-02-13
上一篇已經說了一些基本的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位元組的