我已经读过sizeof联合给出了union中最大的成员大小。但是当我这样做时:我得到了意外的结果:
#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
的大小,以将int
和double
对齐。这样,不管哪个成员处于 Activity 状态,union
都将对齐为64位。
如果改为使用float
创建联合,则它很可能具有36
的大小,因为不需要这种对齐。
union U
{
int arr[9];
float x;
};
请注意,此行为是由实现定义的,并且从理论上讲double
也可能是32位大。因此,您永远不要依赖它。关于c++ - union 的大小给意外的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63431813/