填充如何在结构中工作?

som*_*som 4 c

这个程序的输出是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));
Run Code Online (Sandbox Code Playgroud)

Dav*_*son 5

也许你的"long double"实际上与double(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.