Dan*_*her 15
因为union的大小是最大的数据成员大小
这不一定是真的.考虑
union Pad {
char arr[sizeof (double) + 1];
double d;
};
Run Code Online (Sandbox Code Playgroud)
该联盟中最大的成员是arr.但通常情况下,a double将在四个或八个字节的倍数上对齐(取决于架构和大小double).在某些体系结构上,这甚至是必要的,因为它们根本不支持未对齐的读取.
因此sizeof (union Pad)通常大于sizeof (double) + 1[通常16 = 2 * sizeof (double)在64位系统上,在32位系统上为16或12(在具有8位char和64位的32位系统上double,所需的对齐double可能仍然只有4个字节) ].
这意味着必须在联合中填充,并且只能放在最后.
通常,a的大小union将是任何不小于最大成员的成员所需的最大对齐的最小倍数.
Din*_*mar -2
当我们与其中的原始类型一起使用时并集
union
{
char c;
int x;
}
Run Code Online (Sandbox Code Playgroud)
似乎它不使用填充,因为最大尺寸的数据无论如何都与边界对齐。
但是当我们在联合中嵌套一个结构时,它就会发生。
union u
{
struct ss
{
char s;
int v;
}xx;
}xu;
Run Code Online (Sandbox Code Playgroud)
结果是 8 号。
所以你的问题的答案是 PADDING 存在于 UNION 中。
| 归档时间: |
|
| 查看次数: |
4599 次 |
| 最近记录: |