1,代码:
struct K{
double d;
char c;
};
int main()
{
cout << sizeof(K) << endl;
}
2,输出:我的机器上测试结果为12,环境:32位 linux + gcc 3.22(老版本了),编译器默认对齐为8字节,即#pragma pack(8).
3,问题:我以前一直以为这种情况下应该是 8 + 1 + 7 = 16 字节,而且这几天看了几个相关的帖子,论坛上大部分人也都是这种看法:double 占8个字节,因此结构体应该以8字节作为有效对齐位,因此 K 应该为16字节。
但是实验结果是12字节,有说法认为double类型只需要保证4字节对齐即可,不需要8字节。对32位机器来说,这种说法还是有其合理性的。
我希望大家在自己的编译器上测试一下,看看sizeof(K)的结果是多少。