Struct 和 Union的区别以及内存对齐方式

1.区别:

(1)在存储多个成员信息时,struct给每个成员分配存储空间,可以存储多个成员信息;而union成员会用同一个存储空间,只能       存储最后一个成员信息。

(2)在任何同一时刻,union中只存放了一个被先选中的成员,struct中所有成员都存在。

(3)对于union中的某一成员赋值,会改写其他成员的值,原先的值就不存在了;struct的某一成员赋值不影响其他成员的值。

2.对齐方式:

union的大小取决于它所有的成员中,占用空间最大的一个成员的大小;

复合数据类型,如union,struct,class的对齐方式为成员中对齐方式最大的成员的对齐方式。

注:对界是可以更改的,使用#pragma pack(x)宏可以改变编译器的对界方式,默认是8。C++固有类型的对界取编译器对界方式与自身大小中较小的一个

eg:

struct s1
{
 char a;
 double b;
 int c;
 char d;
};
struct s2
{
 char a;
 char b;
 int c;
 double d;
};
cout<<sizeof(s1)<<endl; // 24
cout<<sizeof(s2)<<endl; // 16
union u
{
 double a;
 int b;
};

union u2
{
 char a[13];
 int b;
};
union u3
{
 char a[13];
 char b;
};
cout<<sizeof(u)<<endl; // 8
cout<<sizeof(u2)<<endl; // 16
cout<<sizeof(u3)<<endl; // 13

eg(对于注的例子):C++固有类型的对界取编译器对界方式与自身大小中较小的一个。

#pragma pack(2)
union u2
{
 char a[13];
 int b;
};
cout<<sizeof(u2)<<endl;//14




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值