3

我正在介绍嵌入式系统课程,并且在掌握对齐与未对齐内存的概念时遇到了一些困难。

我们主要使用汇编级编程。

好的,这就是我目前所理解的:对齐用于指定汇编程序将使用的指令,即所有数据的长度相同。它的全字长或半字长或双字长。

未对齐意味着数据未定义为任何特定长度。

这个对吗?未对齐与对齐的意义是什么?与另一种相比,一个人何时会从使用其中受益?

对于新手的问题,我深表歉意。

4

2 回答 2

5

4 字节对齐或 32 位对齐意味着地址是 4 字节的整数倍,例如 0x000、0x004、0x008、0x00C 等。另一种查看方式是 4 = 2 的 2 次方,因此低两个地址位需要为零以对齐。8 字节对齐,64 位,8 = 2 的 3 次方,因此低 3 位需要为零才能与 8 字节对齐。2 字节,2 的 1 次方,因此偶数地址对齐,奇数地址未对齐,用于 2 字节传输。基于字节的传输总是对齐的,没有问题。(2 的 0 次方,0 位需要为零才能对齐)。

所有系统都会对未对齐的传输进行处罚,有些系统比其他系统更严重。RISC 平台的性能特征之一是阻止或防止未对齐的传输,因此 MIPS、ARM 等属于更严厉的惩罚类别(以防止它们一起出现)。ARM 现在有内存控制器,允许未对齐的传输而无需旋转或任何奇怪的东西,不确定 MIPS。作为一般规则,尽管您应该尽量避免未对齐的传输,无论您使用什么系统。

于 2013-03-24T22:22:54.353 回答
2

内存对齐是指数据在地址空间中的放置。

例如,其两个最低有效位被清除(即 4 的倍数)的地址将在 32 位字系统上进行字对齐。类似地,最低有效位清除的地址是半字对齐的。如果某些数据的地址未与指令、数据总线或其他因素所需的任何边界对齐,则它是未对齐的。

一些处理器(例如 ARM)要求数据与数据的大小对齐(一个字应该是字对齐的,等等)。尝试访问未对齐的数据可能会导致数据旋转或未定义的行为。
其他处理器可能允许未对齐的内存访问并在内部处理它们,但由于额外的内存访问而导致性能损失。

于 2013-03-24T20:32:55.697 回答