问题描述
ARMv7的LDR
(及其他一些)指令通过“分解”对多个对齐访问的访问来支持要加载的未对齐地址(例如,this article中所述)。
另一方面,如果内存被映射为设备或强序存储,则不允许未对齐的访问(将触发异常)。
我的问题是关于这种行为的理由。毕竟,对于这些内存类型,访问也可以细分为多个对齐方式。这是我的猜测:
- 设备存储器通常用于映射硬件寄存器,因此每次访问都可能会有副作用。因此,该架构不允许进行“隐藏”访问,而这种访问可能会产生有害的副作用
- 严格排序的内存假设严格的访问顺序,因此“隐藏”访问将出乎预期的顺序。
因此,从“预期行为违规”的角度来看,这两个是我推测的理由。还有其他身体上的限制吗?
我的问题的底线是我们有一些内存映射的区域,在物理层面上有对齐要求,但是我不在乎我在问题中列出的任何考虑因素,如果ARM可以很好正在重新排列或破坏访问。因此,我的疑问是,如果将其映射为“普通内存”(从不缓存),是否会遗漏任何可能出现的问题。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)