工会对sizeof感到困惑

时间:2020-05-13 10:26:16

标签: c++

我具有以下工会:

union Variant{
    char txt[10];
    double floating_point;
};

当我尝试打印sizeof(Variant)(输出16个字节)时,会感到困惑。

为什么它不输出10个字节而不是16个字节?如果union占用与其最大成员一样多的内存,则应该max(sizeof(char[10]), sizeof(double))否?

如果在我的系统中double占用8个字节,这6个字节到底从哪里来?

2 个答案:

答案 0 :(得分:1)

由于alignment位于8字节边界上,因为union的最大成员double的大小可能是您计算机上的8个字节。如果您使用的是int而不是double,则大小可能为12

char数组的大小为10字节,因为它有十个元素。大于最大成员double的大小8。因此,下一个可能的对齐方式是2 * 8,即16

如果您的数组包含8个或更少的元素,则联合的大小将为8,等等。

答案 1 :(得分:0)

为什么它不输出10个字节而不是16个字节?如果union占用与其最大成员一样多的内存,则应该执行max(sizeof(char [10]),sizeof(double))no吗?

结构或类的大小是具有最大alignment requirement的成员的对齐方式的倍数。在此,该成员为double,其对齐方式为8,即alignof(double) == 8alignof(Variant) == alignof(double)

相关问题