我正在阅读麻省理工学院开放式课件的讲义,关于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个字节的填充?
答案 0 :(得分:0)
根据C语言标准,位字段布局是实现依赖。所以这个结构的大小在作者的机器上是12个字节是很好的,但是它在你的机器上是16个(但是,很奇怪,在演讲中他们声称它的大小是12个字节而没有指出它是编译器依赖的)