结构体、类的成员对齐

自然对齐

为了保证CPU的运算稳定和效率,要求基本数据类型在内存中的存储地址必须自然对齐。所谓自然对齐,就是基本数据类型的变量不能简单的存储于内存中的任意地址处,它们的起始地址必须能够被它们的大小整除。

例如,在32位平台下,int和指针类型的变量的地址应该能够被4整除。


结构体变量的自然对齐

对于复合类型(一般指结构体和类)的对象,如果它的起始地址能够满足其中要求最严格(最高)的那个数据成员的自然对齐要求,那么它就是自然对齐的。

什么是“自然对齐要求最严格”呢?距离来说吧,double、int、bool所占的空间依次为8、4、1,它们的对齐严格性依次降低。结构体内部成员变量的对齐方式,按照其sizeof大小最大的基本类型变量的对齐要求进行对齐。必要的时候,对象的末尾还要进行字节填充。

总结:结构体的长度一定是其最长的成员变量大小的整数倍。


例子

01	struct{         //sizeof 8,按4字节对齐,末尾填充2字节
02	    long a1;
03	    short a2;
04	}B;
05	 
06	struct STest        //sizeof 16,按8字节对齐,末尾填充7字节
07	{
08	    double b;
09	    char a;
10	};
11	 
12	struct ThreeeShort{ //sizeof 10,按2字节对齐,末尾填充1字节
13	    short a;
14	    short b;
15	    short c;
16	    short d;
17	    char ch;
18	};


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值