如何解决工会的大小给意外的结果
我已经阅读到sizeof联合会在联合会中提供最大的成员人数。但是当我这样做时:我得到了意外的结果:
#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
和{ {1}}。这样,无论哪个成员处于活动状态,double
都将对齐为64位。
如果您改用union
创建联合,则它的大小很可能为float
,因为不需要这种对齐。
36
请注意,此行为是实现定义的,并且理论上union U
{
int arr[9];
float x;
};
也有32位大的可能。因此,您永远不要依赖它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。