对齐的比未对齐澄清

时间:2013-03-24 20:09:15

标签: assembly

我正在介绍嵌入式系统类,并且难以理解对齐内存与未对齐内存的概念。

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

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

未对齐表示数据未定义为任何特定长度。

这是对的吗? 未对齐vs对齐有什么意义?何时使用一个与另一个相比可以从中受益?

我为新手问题道歉。

2 个答案:

答案 0 :(得分:5)

4字节对齐或32位对齐意味着4个字节的整数倍的地址,所以0x000,0x004,0x008,0x00C等。另一种查看方式是4 = 2到2,所以低2地址位需要为零才能对齐。 8字节对齐,64位,8 = 2到功率3,因此低3位需要为0才能进行8字节对齐。 2字节,2到电源1,所以偶数编号的地址是对齐的,奇数编号的地址是2字节传输的未对齐。基于字节的传输总是一致的,没有问题。 (2为0的幂,0位需要为零才能对齐)。

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

答案 1 :(得分:2)

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

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

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