工会与大小混淆
Unions confusion with sizeof
我有以下联合:
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 * 8
16
.
如果你的数组有 8 个或更少的元素,则联合的大小将是8
,等等。
为什么它不输出 10 个字节而不是 16 个字节? 如果联合占用与其最大成员一样多的mamory,它应该做max(sizeof(char[10](,sizeof(double((no ?
结构或类的大小是具有最大对齐要求的成员的对齐方式的倍数。这里,该成员是double
,其对齐方式为 8,即alignof(double) == 8
和alignof(Variant) == alignof(double)
.
相关文章:
- 没有找到相关文章