Eri*_*c Z 11 c++ compiler-construction alignment
我知道有些CPU架构不支持未对齐的地址访问(例如,ARM 4之前的ARM架构没有访问内存中半字对象的指令).并且该架构的某些编译器(例如,某些版本的GCC)在找到未对齐的地址时将使用一系列内存访问,因此未对齐的访问对开发人员来说几乎是透明的.(请参阅GCC的权威指南,William冯哈根)
但我想知道编译器如何知道地址是否对齐?毕竟,编译器看到的是虚拟地址(有效地址,EA),如果它可以看到任何东西.程序运行时,EA可以通过OS映射到任何物理地址.即使虚拟地址对齐,生成的物理地址也可能未对齐,不是吗?物理地址的对齐是真正重要的,并在CPU地址线上传输.
因为编译器根本不知道物理地址,所以如何知道变量的地址是否对齐?
yid*_*ing 16
虚拟地址不会映射到任何物理地址.虚拟内存以页面形式出现,这些页面以对齐的方式映射到物理页面.(通常与4096对齐).
| 归档时间: |
|
| 查看次数: |
740 次 |
| 最近记录: |