C++32位与64位结构对齐填充

atmip9wb  于 2023-03-25  发布在  其他
关注(0)|答案(1)|浏览(147)

考虑以下c++结构声明:

struct SFoo
{
    int A = 200;
};

struct SBar
{
    SFoo Foo = SFoo();
    SBar* Bar = this;
};
  • 为什么offsetof(SBar, Bar) == 8编译为64位时甚至比sizeof(SFoo) == 4
  • 为什么它与32位不同(offsetof(SBar, Bar) == 4,因为我也希望它在64位上)?
fykwrbwg

fykwrbwg1#

Bar是一个64位的指针,因此需要对齐到一个8字节的地址。它是隐式填充的。另外,您可以使用alignof()检查对齐要求。

相关问题