数据对齐和继承问题

fed*_*edj 0 c++ data-structures

在64位上考虑这些结构:

struct base
{
  long a;
};

struct derived : public base
{
  long b;
  char c;
};
Run Code Online (Sandbox Code Playgroud)

我得到24的大小和填充警告,但我不明白为什么.对我来说,具有这种继承的数据是这样对齐的

a
b
c
Run Code Online (Sandbox Code Playgroud)

因此a在8,b上对齐,c是char并且在1上对齐.那么问题是什么,为什么大小为24?

Ben*_*son 8

大小为24,因此当您创建数组struct derived的第二个元素的数组时,将具有8字节对齐base::a.