工会与大小混淆

Unions confusion with sizeof

本文关键字:      更新时间:2023-10-16

我有以下联合:

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

当我尝试打印输出16 个字节sizeof(Variant)时,会出现混乱。

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

如果在我的系统中,double需要 8 个字节,那么 6 个字节从何而来?

由于 8 字节边界上的对齐方式,因为联合的最大成员double的大小可能是计算机上的8字节。如果你有一个int而不是double,大小可能会12

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

如果你的数组有 8 个或更少的元素,则联合的大小将是8,等等。

为什么它不输出 10 个字节而不是 16 个字节? 如果联合占用与其最大成员一样多的mamory,它应该做max(sizeof(char[10](,sizeof(double((no ?

结构或类的大小是具有最大对齐要求的成员的对齐方式的倍数。这里,该成员是double,其对齐方式为 8,即alignof(double) == 8alignof(Variant) == alignof(double).

相关文章:
  • 没有找到相关文章