2013-03-24 37 views
2

我正在對嵌入式系統類進行介紹,並且在掌握對齊與未對齊內存的概念時遇到了一些困難。Aligned Vs.未對齊的說明

我們主要使用匯編級編程。

好的,所以這是我目前所瞭解的: Aligned用於指定彙編器將使用的指令,即所有數據具有相同的長度。它的全部字長或半字長或雙字長。

未對齊意味着數據沒有被定義爲任何特定的長度。

這是正確的嗎? 未對齊vs對齊的意義是什麼?什麼時候使用一個與另一個相比會受益?

我對新手的問題表示歉意。

回答

5

4字節對齊或32位對齊意味着是4字節整數倍的地址,所以0x000,0x004,0x008,0x00c等。查看此信息的另一種方式是對於電源2爲4 = 2,因此較低兩個地址位需要爲零才能對齊。 8個字節對齊,64位,8 = 2給電源3,所以低3位需要爲零,以8字節對齊。 2個字節,2給電源1,所以偶數地址對齊,奇數地址未對齊2字節傳輸。基於字節的傳輸始終保持一致,沒有問題。 (2的電源爲0,需要將0位對齊爲零)。

所有系統都會對未對齊的傳輸進行處罰,其他一些系統會受到處罰。 RISC平臺的一個性能特徵是阻止或防止未對齊的傳輸,因此MIPS,ARM等屬於更強的處罰類別(以防止它們一起)。 ARM現在擁有內存控制器,可以在沒有旋轉或任何奇怪的情況下進行未對齊的傳輸,不確定MIPS。作爲一般規則,儘管您應該嘗試避免未對齊的傳輸,無論您使用的是何種系統。

2

內存對齊是指在地址空間中放置數據。例如,在32位字系統上,其兩個最低有效位清除(即4的倍數)的地址將是字對齊的。類似地,清除最低有效位的地址是半字對齊的。如果某些數據的地址未與指令,數據總線或其他因素所需的任何邊界對齊,則它是未對齊的

某些處理器(例如ARM)需要將數據與數據大小對齊(一個字應該是字對齊的,等等)。嘗試訪問未對齊的數據可能會導致數據輪轉或未定義的行爲。
其他處理器可能允許未對齊的內存訪問並在內部處理它們,但由於額外的內存訪問而導致性能下降。