c++结构体对齐

参考各资料得出自己使用的公式:

1、(当前偏移量+当前填充数)%当前变量大小=0

2、(总偏移大小+末尾填充数)%最宽变量大小=0

必须先满足1、再满足2。例如

代码如下:

struct A{
int a;//(当前偏移量0+当前填充数0)%当前变量大小4=0
char b;// (当前偏移量4+当前填充数0)%当前变量大小1=0
short c;// (当前偏移量(4+1)+当前填充数1)%当前变量大小2=0。
};
// 由上可知(总偏移量(4+1+1+2)+末尾补数0)%最宽变量大小4=0。所以sizeof(A)=8。即4+(1+1)+2=8

快速记忆:4+(1+1)+2=8

struct B{
char b;//(当前偏移量0+当前填充数0)%当前变量大小1=0
int a;// (当前偏移量1+当前填充数3)%当前变量大小4=0
short c;// (当前偏移量(1+3+4)+当前填充数0)%当前变量大小2=0。
};
// 由上可知(总偏移量(1+3+4+2)+末尾补数2)%最宽变量大小4=0。所以sizeof(B)=12。即(1+3)+4+(2+2)=12

快速统计:(1+3)+4+(2+2)=12

struct C{
short c;//(当前偏移量0+当前填充数0)%当前变量大小2=0
char b;//(当前偏移量2+当前填充数0)%当前变量大小1=0
int a;//(当前偏移量2+1+当前填充数1)%当前变量大小4=0
};
// 由上可知(总偏移量(2+1+1+4)+末尾补数0)%最宽变量大小4=0。所以sizeof(C)=8。即2+(1+1)+4=8

快速统计:2+(1+1)+4=8

struct D{
int a;//(当前偏移量0+当前填充数0)%当前变量大小4=0
short c;//(当前偏移量4+当前填充数0)%当前变量大小2=0
char b;//(当前偏移量4+2+当前填充数0)%当前变量大小1=0
};
// 由上可知(总偏移量(4+2+1)+末尾补数1)%最宽变量大小4=0。所以sizeof(D)=8。即4+2+(1+1)=8
快速统计:4+2+(1+1)=8

int AS = sizeof(A);// sizeof(A)=8
int BS = sizeof(B);// sizeof(B)=12
int CS = sizeof(C);// sizeof(C)=8
int CD = sizeof(D);// sizeof(D)=8

};

参考:

http://blog.csdn.net/zhm977863924/article/details/44217501

https://www.cnblogs.com/qintangtao/archive/2013/03/06/2945674.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值