ARM專題之位元組對齊

2021-05-21 20:27:55 字數 707 閱讀 7861

什麼叫位元組對齊?

如果乙個資料是以能被4 整除的位址開始的連續儲存,那麼它就是字對齊,否則就是非字對齊。舉例說明四位元組對齊:對記憶體進行操作時,被訪問的位址必須為4的倍數。如果分配到的位址的位址不是4的倍數時,cpu實際訪問的位址還是按照字對齊的方式來操作。

用ads的armc complier下optimization level可能引起問題,其中的乙個問題就是位元組對齊的問題。下面講講問題的現象及實質。

當時問題的現象是:程式使用一公共變數buf建立佇列,如果ads編譯優化選項採用minium則軟體工作正常;原始碼不變,如果採用all優化,則不正常,資料紊亂且無法工作。為了發現問題,我們分別用minium和all編譯,在反彙編條件下單步跟蹤程式,觀察cpu暫存器和記憶體變數的變化情況。

當記憶體起始位址為4位元組對齊位址的情況時,編譯器分配位址和實際位址一致,因此不存在上述問題。

結 論:

arm嵌入式系統中,當把乙個記憶體區域初始化為某個結構體時,必須注意位元組對齊的情況。如果該記憶體起始位址為非對齊位址,不僅得不到預期的結果,還可能導致一些很奇怪的讓人無法理解表面問題。在c層面上不太容易觀察到這些問題的實質,只有深入到彙編一層去分析程式,才可能理解這些現象的深層原因。

ARM位元組對齊問題詳解

一.什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的作...

位元組順序 位元組對齊

一.位元組順序的產生 在計算機中,資料是以位元組為單位存放的,而c語言中只有char才是乙個位元組,其他如int,float都是大於乙個位元組,所以就存在將資料按怎樣的順序存放的問題。一般有大端序和小端序兩種方式,特殊的還有混合序,也就是兩種存放方式同時存在於乙個計算機系統中。上面講的都是主機位元組...

位元組順序 位元組對齊

一.位元組順序的產生 在計算機中,資料是以位元組為單位存放的,而c語言中只有char才是乙個位元組,其他如int,float都是大於乙個位元組,所以就存在將資料按怎樣的順序存放的問題。一般有大端序和小端序兩種方式,特殊的還有混合序,也就是兩種存放方式同時存在於乙個計算機系統中。上面講的都是主機位元組...