内存对齐

内存对齐
规则1:对于结构体第一个成员,偏移为0;以后每个数据成员,偏移=[min(#pragma pack(),sizeof(自己))的倍数]
规则2:完成规则1后,结构或联合本身也要进行对齐,临时值=min(#pragma pack(),sizeof(结构或联合中字节最长的数)),最终字节数=临时值的整数倍并且最接近规则1字节数(不够则添加)

例:struct{char,int,short},sizeof()大小为12

内存对齐主要作用
程序员心目中的内存印象,由一个个的字节组成,而CPU并不是这么看,CPU把内存当成是一块一块的,块的大小可以是2,4,8,16字节大小,因此CPU在读取内存时是一块一块进行读取的.块大小称为memory access granularity(粒度)
假设CPU要读取一个int型4字节大小的数据到寄存器中,分两种情况讨论:
1:当该数据是从0字节开始时,CPU只需读取内存一次即可把这4字节的数据完全读取到寄存器中
2:当该数据是从1字节开始时,此时CPU先访问一次内存,读取0-3字节的数据进寄存器,并再次读取4-5字节的数据进寄存器,接着把0字节和6,7,8字节的数据剔除,最后合并1,2,3,4字节的数据进寄存器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值