2
我經歷的講義爲實際編程MIT開放課件用C約結構填充:結構填充的字節對齊 - 具體的例子
在這裏面,我明白了爲什麼以下結構有大小16:
struct foo {
short s;
union {
int i;
char c;
}u;
unsigned int flag_s : 1;
unsigned int flag_u : 2;
unsigned int bar;
}
爲了儘量減少結構的大小,筆者從重新排列最大的領域,以最小的尺寸:
struct foo {
union {
int i;
char c;
}u;
unsigned int bar;
short s;
unsigned int flag_s : 1;
unsigned int flag_u : 2;
}
而作者說結構的大小現在應該是12.但是,在我的Windows 32位機器上,我仍然得到了輸出爲16的結構大小。這是爲什麼?
只有當我移動位域下的'short s'字段時,我得到的結構大小爲12。這是因爲位域必須以4字節邊界爲開始,因爲它是無符號整數?因此,在上面的結構中,在'short s'字段後仍然會有2個字節的填充字節?