内存对齐

首先要知道,CPU读取内存中的数据书按照块来读取的。而这个块的大小可以是2的n次方。

设想一下,如果在一块内存中,首地址存放的是char类型,占一个字节,紧接着存放一个4字节的int类型。那么当CPU要以4字节的块大小读取这个int类型的值,那么需要先读取0~3字节,再读取4~7字节,然后剔除0、5、6、7字节位上的数据,从而拼成这个int类型数据,这样一来,就会使得CPU的利用率下降。

解决办法就是:将这个int类型的数据存放在4~7字节的位置上.以空间换取时间。

这就涉及到内存对齐的规则。一下有两条:

1)对于标准数据类型,它的存放地址需要是它长度的整数倍。

2)对于自定义的数据类型,比如说是结构体。需要遵循以下3条:

    a.第一个属性开始,偏移量为0;

    b.第二个属性往后,地址是 该类型的整数倍 内存对齐模数比  的最小值的整数倍;

    c.作为一个整体,所有属性计算完成后,要保证整体需要放在  属性最大类型  和  内存对齐模数比  的最小的值的整数倍上。

内存对齐的好处:

1、平台移植原因不是所有的硬件平台都能任意访问任意地址上的数据,有些硬件平台只能在某些特定地址处读取特定的数据,否则会抛出硬件异常;
2、性能原因:数据结构(尤其是栈)应尽可能的在自然边界对齐。原因在于,访问未对齐的内存,处理器需要进行两次访问,而访问对齐的内存,处理器只需要进行一次访问。
 

爱奇艺: https://www.iqiyi.com/v_19rr20ni48.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值