这个程序的输出是28。我不明白怎么回事?根据我的说法,这应该是32(4+4+4+4+12)+4(以保持对齐)=32。请解释显示输出28的原因??
struct test{
char c;
int d;
int x;
int y;
long double p;
}t1;
printf("%d",sizeof(t1));发布于 2012-05-25 02:57:50
也许您的“长双精度”实际上与双精度(8字节)相同,如果您在32位处理器上,对齐方式是4字节。
4+4+4+4+8 = 24
什么是sizeof(long double)
编辑:
我用了GCC的__builtin_offset_of()和__alignof__进行了调查。解释结构大小的实际答案是:
4+4+4+4+12 = 28
sizeof(long double)是12岁。
不需要填充,因为__alignof__(long double)是4和。有趣的是,__alignof__(double)是8。
发布于 2012-05-25 03:44:39
在64位系统上,大小为char -1字节(不是4字节) int -4字节长double - 12字节
所以总数是1+4+4+4+12+padding = 28个字节!!
发布于 2012-05-25 04:01:58
根据this的说法,在gcc 32位模式(使用gcc -m32或使用为生成32位输出而构建的gcc,无论您的平台实际上是什么)中,长双精度仅是4字节对齐。不过,最好参考一下gcc的手册来验证这一点。
https://stackoverflow.com/questions/10743619
复制相似问题