位元組對齊問題總結

2021-07-26 18:00:20 字數 600 閱讀 4593

便於cpu快速訪問,減少cpu訪存的次數。對於不同硬體平台下**的移植尤為重要。

位元組對齊的目標是:讓變數的起始位址符合某種「特性」。比如在32位系統中int變數佔4個位元組,分配記憶體時,其起始位址應該位於4位元組的邊界上,即起始位址能夠被4整除。

編譯器缺省會自動為變數對齊,在x86平台上,gcc缺省會4位元組對齊變數,如果要定義自己的對齊方式,可以通過程式設計實現。

用偽指令pragma pack(n),c編譯器將按照n位元組對齊;使用pragma pack()將取消自定義對齊方式。

使用_attribute((aligned (n))),按照n位元組對齊;使用__attribute_ ((packed))取消這種對齊方式。

兩者之間的區別在於:

第1種會取設定的n位元組和結構體中成員長度的最大長度,兩者中的最小值來作為實際的對齊位元組數。

第2種會取設定的n位元組和結構體中成員長度的最大長度,兩者中的最大值來作為實際的對齊位元組數。

位元組對齊總結

寫在前面位元組對其是面試筆試當中出現頻率算是比較高的乙個知識點。在此總結一下。主要內容例題 pragma pack 2 class bu ubuf void foo typedef char f void enum disk bu 問 sizeof bu 的值是 首先先不急著回答上面的問題如果你不知...

位元組對齊總結

1.位元組對齊的緣由?一句話說就是提高訪問效率,訪問效率與機器相關,比如有的機器總是從偶數位元組開始取資料 同時,訪問效率也和資料型別相關,比如如果取乙個整型數字時,若能夠一次取出來肯定是最好,但是若由於機器取資料總是從偶數位元組開始這個原因花了兩次訪問,那麼肯定會降低效率了。2.字元對齊中的一些概...

位元組對齊問題

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