use*_*917 3 c++ sizeof pragma memory-alignment memory-layout
我有以下代码:
#pragma pack(push, 4)
class C {
public:
char a;
char b;
short c;
char d;
};
C e;
Run Code Online (Sandbox Code Playgroud)
我不明白为什么sizeof(e)是6.我认为sizeof(e)将是8 => 1(a)+ 1(b)+ 2(c)+ 1(d)+ 3(对齐)
Packing指令设置对齐的上限,而不是最小值.对齐要求C仅为2,因此将对齐的上限降低到4对它没有影响.
如果您打算增加对齐,则可以使用alignas(这恰好是标准功能,与打包不同).
但是,为什么填充的数字除以2而不是2的幂?
因为对象的大小只需要是该对象的对齐的倍数.对齐必须是2的幂.