原則1:windows下,k字節基本類型以k字節倍數偏移量對齊,自定義結構體則以結構體中最高p字節基本類型的p字節倍數偏移量對齊,Linux下則以2或4字節對齊;ios
原則2:總體對齊原則,例如數組結構體,首元素字節對齊,而次元素字節未對齊,則數組元素不是字節對齊,需對尾部基本數據以結構體中最高p字節基本類型補充對齊windows
做用:1節省寄存器用於保存偏移量的數量,2合理利用空間數組
測試代碼:測試
1 #include <iostream> 2 3 4 typedef struct a 5 { 6 char a; 7 }A; 8 9 typedef struct b 10 { 11 char a; 12 short b; 13 }B; 14 15 typedef struct c 16 { 17 short b; 18 char a; 19 }C; 20 21 22 typedef struct D 23 { 24 short b; 25 char a; 26 double c; 27 char e; 28 }D; 29 30 31 32 33 using namespace std; 34 int main() 35 { 36 37 38 std::cout<< sizeof(A)<<std::endl; 39 std::cout<< sizeof(B)<<std::endl; 40 std::cout<< sizeof(C)<<std::endl; 41 std::cout<< sizeof(D)<<std::endl; 42 43 return 0; 44 }