sizeof union 给出意想不到的结果

sizeof union giving unexpected results

我读到 sizeof union 给出了 union.But 中成员的最大大小,当我这样做时 this:i 得到了意想不到的结果:

#include <iostream>

using namespace std;
union RecordType 
{
    int arr[9];
    double x;
};
int main()
{
    RecordType t;
    cout << sizeof(t);   //output is 40,instead of 36 (9*4bytes each)
}

为什么大小是 40 而不是 36,即使我将数组更改为“int arr[10]”,然后 sizeof 给出的输出为 40(与“int arr[9]”的情况相同) ,内部发生了什么?

因为 double 在您的后端是 64 位类型,编译器将用额外的 32 位或 4 个字节填充 union 的大小以对齐 ints和 double。这样 union 对齐到 64 位,无论哪个成员处于活动状态。

如果您使用 float 创建一个联合,它的大小很可能是 36,因为不需要这样的对齐。

union U 
{
    int arr[9];
    float x;
};

请注意,此行为是实现定义的,理论上 double 也可能是 32 位大。所以你永远不应该依赖它。