便于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字節和結構體中成員長度的最大長度,兩者中的最大值來作為實際的對齊字節數。
新聞熱點
疑難解答