struct abc
{
char arr[7];
char arr1[2];
int i:24;
};
在使用 sizeof 运算符的上述结构中,我得到了它的大小为12个字节。但根据我的计算(也许是错误的),它应该是16字节。为什么它给出的是12个字节?
另一个问题:
根据 C99 第6.7.2.1段第14款,
“结构或联合对象的每个非位域成员都以适合其类型的实现定义方式对齐。”
对于特定的实现,在哪里可以获得描述特定编译器(例如gcc)如何在结构中引入填充的文档?是否有所有编译器通用的规则适用于特定体系结构?
char
数组不需要对齐,而i
是一个三字节的位域,因此它是7+2+3=12。 - Sergey Kalinichenkoarr
是七字节,arr1
是两字节,i
是三字节。 - Sergey Kalinichenko