从CPU角度看内存访问对齐

发布时间:2021-12-09 01:43:42

关于自然对齐


?


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字节,




?


所以引入自然对齐的概念:(对于下面的,可以这样来理解:按照这些规则进行对齐的话,就可以保证内存的一次访问都在64字节的cache line的宽度之内)














?



不得不说,处理器的这种设计,4Kbytes/1way,不正好符合OS虚拟内存管理中,页大小为4K。这样OS的每次虚拟内存访问,和处理器对内存的访问正好是一致的


,RAM<->Cache 都是4K。


?


?


关于Itanium2的数据对齐要求





?


?1. 如果数据单元访问跨越4K边界,那么一定会引发UDRf。这是必须行为。

?


semaphore指令从不考虑PSR.ac标志,只要未对齐引用发生,就会引发UDRf。对于cmp8xchg16指令,必须是8字节对齐


?


HPUX如何处理对齐问题:


(一般编译器会默*凑 min(8字节,数据类型),即自然对齐的方式,处理对齐问题,分配到指定的内存边界)



1. 编译器指令:#pragma align N? (N=1,2,4,8,16)


该指令影响随后的一条定义语句,如char a; 将导致a 分配在在N字节边界地址


2. #pragma pack N 将影响范围扩大到从它开始到文件结束。再用一次不带参数#pragma pack,将复位到默认对齐。


3. #pragma unalign N将影响随后的一个typedef,如 typedef int int_align_n; 将导致之后用int_align_n定义的数据对齐在N字节边界。


4. 取某数据地址,然后运行时cast后付给一个指针变量,将会导致未对齐的访问。因为编译器没有为这种情况使用特定的非对齐访问指令。


?


前面这些指令都会导致数据的存储变成非自然对齐,访问时就可能会引发UDRf或Alignment check failed. 可能会导致程序终止用bus error。视OS*台/执行不同而不同(看上面这段有描述)。


?


如何避免非对齐的数据访问crash呢?


1. 不要使用非自然对齐的与编译指令,或指针dereference.


2. HPUX aCC编译器+unum(如+u1)可以让编译器产生非对齐,1字节进行dereference load/store的指令,避免UDRf或Alignment check failed错。但会显著降低程序效率。


3. HPUX aCC链接器-lunalign (ia64架构)选项或-lhppa (pa-risc架构)。它会链接一段代码,包含一个函数allow_unaligned_data_access(),调用这个函数将安装一个sig handler,处理sig 10(其实安全的忽略它,访问数据没有问题),降低效率是必然的。


?


自然对齐的方式最容易被碰到,在HPUX IA64*台。莫名其妙你的程序会bus error 然后终止,就是说你该考虑一下你的数据对齐问题了。:-)

相关文档

  • 燕窝有多少种
  • 大休初一作文
  • 浙江一日游最好玩的景点推荐
  • word表格最后一列没有边框
  • html编辑对接api,如何优雅的“编写”api接口文档
  • java中封装的好处_编程中封装的作用/优点
  • 高并发场景下ArrayList线程不安全问题解析
  • 鼻炎的症状有哪些?该怎样缓解?
  • 小学生美好的时光作文500字
  • ipadqq下载的文件在哪
  • [转]机器学习相关数据库 备份
  • 关于马蹄莲的养殖方法介绍
  • 表示思想品格不知不觉地受到影响慢慢发生了变化的成语
  • 7.1建党节主题活动总结心得多篇
  • 高一我的青春我的梦做合格共青团员征文
  • qq炫舞手游66级怎么结婚
  • 往来款项清理专项审计报告
  • 大一军训心得体会总结2000字
  • 矫正言语呼吸障碍的方法
  • 抽筋的原因和处理方法你知道怎么正确应对抽经吗
  • vegan 包进行Adonis 分析
  • 学期末对老师说的话
  • Lua 和 Python 相比,哪种语言更快更好
  • Spring data ES攻略
  • 解决反向代理的绝对路径问题
  • 破解受保护excel文档的方法步骤
  • 温暖人心的元宵QQ祝福语摘录62条
  • 浅谈房建工程软土地基的施工技术研究
  • 天气丹用了为什么长痘 用天气丹长闭口粉刺的原因
  • 让body、Div占满整个浏览器的窗口
  • 猜你喜欢

    电脑版