爲什麼要內存對齊?
2、性能原因,爲了訪問未對齊的內存,處理器需要作兩次內存訪問;而對齊的內存訪問僅需要一次訪問。
對齊規則?
每個特定平臺上的編譯器都有自己的默認“對齊係數”(GCC默認爲4, GCC 64位機器默認爲8)。
基本規則:
2、結構(或聯合)的整體對齊規則:在數據成員完成各自對齊之後,結構(或聯合)本身也要進行對齊,對齊將按照#pragma pack指定的數值和結構(或聯合)最大數據成員長度中,比較小的那個進行。
如何指定對齊係數?
1. #pragma pack(N) //N必須爲2的N次方#pragma pack() //恢復默認的基準;
2.
struct example_t
{
//...
} __attribute__((packed或aligned(N))); // packed表示緊湊模式,相當於#pragma pack(1)
3. gcc -fpack-struct=N ...