地址对齐

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了地址对齐相关的知识,希望对你有一定的参考价值。

    ARM指令和51单片机指令不同,ARM所有指令的长度都是固定的,都是4个字节32位。而51单片机的指令的长度不是固定的,有单字节指令也有双字节指令。
    ARM的数据总线宽度也是32位的,所以ARM可以处理32位的数据,这就要求所有的数据也必须是存放在地址为4的整数倍的单元处。
    正常情况下,R15中的值应该为4的整数倍,访问数据时给的地址也应该是4的整数倍。这种情况就是地址对齐。如果不满足这种情况,那么就是非地址对齐。
 
非地址对齐访问程序存储器:
    当访问程序存储器时,所给的地址是非对齐的,那么对于ARMv3及以下版本的处理器来说,会交由存储系统来忽略R15中的低两位(也就是说地址会原封不动地送到存储系统),然后进行取址。对于ARMv4及以上版本的处理器,如果出现非对齐访问,那么会出现不可预知的结果。
    对于Thumb指令,如果出现非地址对齐访问程序存储器,那么最低位将会由存储器系统来忽略,然后进行取址。
 
非地址对齐访问数据:
    不同的指令会出现不同的处理情况。
    1、出现不可预知的错误。
    2、交由存储系统来忽略地址的低两位,也就是说地址原封不动地送到存储系统中。
    3、由处理器内核忽略地址的低两位。

以上是关于地址对齐的主要内容,如果未能解决你的问题,请参考以下文章

C语言精要总结-内存地址对齐与struct大小判断篇

C语言精要总结-内存地址对齐与struct大小判断篇

如何检查内存地址在 C 中是不是为 32 位对齐

Avalon总线的地址对齐与NIOS编程

在缓冲区溢出中,新的返回地址如何完美对齐?

Go中的地址对齐