从CPU角度看内存访问对齐

关于自然对齐

 

1. 首先什么是cache line? cache line就是处理器从RAM load/store数据到CPU cache所使用的数据线。

2. 什么是对齐:有些人说,address of data % sizeof(data type)==0 就是对齐,其实这不准确,全面的理解它必须从CPU为什么需要对齐,不对齐就会造成数据访问花费额外的时钟周期,和额外的指令(编译器或OS附加的),并且数据经过更长的路径,比如pipeline才能到达CPU(从RAM)。这就是对齐问题。这里的重点是  数据的起始地址 & 数据的大小

 

P4极其之后的处理器,cache line(缓存线)宽度是64字节,


1. 内存的访问如果没有按照64字节边界对齐(例如:每次访问 -读/写在Addr%64!=0就是没对齐),就可能会造成两次cache line split内存访问,和多个upos的执行。
所以一个原则就是,总是对齐数据在操作数大小的地址边界(按照操作数自身的大小进行对齐),如果内存被访问通过矢量指令(解指针引用的内存访问,如, mov ecx, DWORD PTR [ebx], 或 st4 [r8]=r9 (这是IA64指令)。这样的访问不会超过16字节(80位浮点数,或128位long long,在64位系统),那么在16字节边界对

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值