为什么工会的大小不是最大成员的大小?

4 c c++ unions

union data {
    double number2;
    char name[20];
};

int main() {

  printf("%i\n", sizeof(union data));

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我预计它是 20,因为它是最大的,但结果是 24。

Igo*_*nik 11

除了最大成员的大小之外,工会还必须考虑具有最严格对齐要求的成员的对齐。double必须在 8 字节边界上对齐,因此联合的大小必须是 8 的倍数。否则在 的数组中data, 的某些实例number2会未对齐。