当我们谈论几十年时,我们谈论的是 70 年代或 80 年代等。我们不谈论 62 年代或 94 年代。70、80、90 是十位对齐的数字。10 的 1 次方。世纪是 10 的 2 次方,100s。1900 年代、1400 年代等。或者将其视为数字末尾的许多零。
寻址字节相同。在上面的例子中,一年是最小的单位,当我们谈论内存地址时,一个字节是最小的单位,是的,有点小,但我们不单独寻址位。我们寻址字节。与上述年份一样,任何单独的年份都可以谈论 1971、1436 等。地址 0x1234、0x21 也是如此。但是当我们想开始使用 8 位寻址方案进行 16 位访问时,就像谈论几十年,2 的 1 次幂,所以 2 0,2,4,6,8 的单位是对齐地址,用于访问 2 的幂1 个字节数(一个 16 位数字,2 个字节)。如果我们想要进行 32 位访问,即 4 字节访问或 2 的 2 次方,就像上面的世纪一样,我们需要在地址 0x0、0x4、0x8 等结尾处有两个零(4 是 100 二进制,一个 8 是 1000 二进制 0xC 是 1100 二进制,最后两个零)。
上面的 32 位访问使用以 0x7F 结尾的地址,二进制是 01111111,最后两位是 11,不是零,所以这不是对齐的访问。
当您进行非对齐访问时,arm 或 mips 或任何其他计算机会做什么,有些会捕获异常并且不允许您这样做,有些会以您意想不到的方式调整数据,有些只是让您这样做。有些像较新的 arm 可以在运行时针对不同的响应进行配置,较新的 arm 可以让您拥有类似 x86 的体验。
不幸的是,有太多的 x86 和许多从 x86 中产生的不良编程习惯并没有更多地表达惩罚,x86 肯定会因为使用未对齐访问而受到惩罚,惩罚就是性能。arm 和 mips 和其他人更喜欢杀死你的程序,但有一个例外,这是一种非常严厉的惩罚,但却是一个很好的惩罚,因为它教会你不要那样做。
如果您在该地址有某些东西,那么您可能应该使用较小的传输大小(四个单独的字节传输或两个字节和一个半字)来访问它,如果您真的需要它作为 32 位数字,则将这些字节组合成一个 32 位数字.