即使使用填充,sizeof结构也不清晰

use*_*312 3 c++

在下面的结构中,我觉得大小应该是20,但它现在是24.

class X {
  unsigned int a;
  unsigned int b;
  double       c;
  unsigned int d;
};
Run Code Online (Sandbox Code Playgroud)

为什么编译器不能安排d16-20个字节?

Kei*_*ith 6

这样就可以c在数组的8字节边界上保持对齐X.

X x[2];

X[0]:
0-3    unsigned int a
4-7    unsigned int b
8-15   double       c
16-19  unsigned int d
20-23  [PAD]
X[1]:
24-27    unsigned int a
28-31    unsigned int b
32-39   double       c
40-43  unsigned int d
44-47  [PAD]
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到数组元素之间需要4个字节的填充.通过在对象的末尾添加4个字节来捕获它.如果第二个数组元素从位置开始20,那么你会发现它x[1].c不是8字节对齐的.

所以,最后,d确实按照您的预期从字节16开始,但结束d不是对象的结束.