关于数据对齐和存储器读写

    数据对齐是跟数据在内存中的位置相关的话题。如果一个变量的内存地址正好是他长度的整数倍,那么它就叫做自然对齐。

    举例来说,一个32位的整型数据,如果他在内存中的地址刚好可以被4整除,我们就说这个整型数是自然对齐的。

 

    在编译过程中,可以通过编译器来调整数据对齐。

 

     一般在默认情况下,对于标准数据类型来说,它的地址只要是其长度的整数倍就对齐了,而对于费标准的C数据类型按照下面的原则对齐。

 

     1.对于数组,只要按照基本数据类型进行对齐就可以了

     2.对于联合,只要他包含的长度最大的数据类型能够对齐就可以了

    3.对于结构体,只要它包含的长度最大的数据类型能够对齐就可以了。

      结构体还会引入填补机制。填补因对齐我形成的空洞。

 

     对于未对齐的数据结构,一些体系结构要求非常严格。在这种处理器中,访问未对齐的数据会导致处理器陷入,而另外一些处理器,则会导致未定义错误,比如ARM它将会调整地址为对齐之后再读写,而在另外一些体系结构上,则可以正常读写数据,只是性能会下降。

    比如在X86体系的PC上,读一个对齐的int,他会一次读32位。

   而对于未对齐的int,他会读两次,每次读32位,然后再计算出要读取的数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值