其他分享
首页 > 其他分享> > c – 为什么打包对象的sizeof低于预期?

c – 为什么打包对象的sizeof低于预期?

作者:互联网

我有以下代码:

#pragma pack(push, 4)

class C {
    public:
        char a;
        char b;
        short c;
        char d;
};
C e;

我不明白为什么sizeof(e)是6.
我认为sizeof(e)将是8 => 1(a)1(b)2(c)1(d)3(用于校准)

解决方法:

Packing指令设置对齐的上限,而不是最小值. C的对齐要求仅为2,因此将对齐的上限降低到4对它没有影响.

如果您打算增加对齐,则可以使用alignas(这恰好是标准功能,与打包不同).

but still, why the padding is to number divide by 2 and not power of 2?

因为对象的大小只需要是该对象的对齐的倍数.对齐必须是2的幂.

标签:memory-layout,pragma,c,sizeof,memory-alignment
来源: https://codeday.me/bug/20190828/1750066.html