coding---關於字節對齊

(不記得從哪裏讀到的)

字節對齊是指變量的起始地址將滿足某種特性,以達到更高的訪問效率。

#pragma pack(N):

基本數據類型變量m的對齊方式是M(M=min(N,sizeof(m)))字節對齊,即變量m的起始地址必須是M的整數倍;

當N大於m的長度時,按m長度進行字節對齊,不會有什麼問題;

當N小於m時,變量按N字節對齊,此時可能導致問題;

對於指針類型變量,起始地址爲4的整數倍(32位)或8的整數倍(64位)爲最佳,函數指針非自然對齊時,有的編譯器會報錯,有的編譯時不報錯但執行會coredump。

總之,沒有苛刻的空間要求,代碼均要採用字長等量對齊,32位程序4字節對齊,64位程序8字節對齊,這樣不僅安全,而且執行效率高。自然對齊方法:

#ifdef HP_UNIX
 #ifdef _64_BIT_
  #pragma pack 8
 #else       
  #pragma pack 4
 #endif
#elif defined(AIX)
#pragma options align=natural
#else
 #ifdef _64_BIT_
  #pragma pack(8)
 #else
  #pragma pack(4)
#endif
#endif

另:結構體成員變量自然對齊是按最大成員對齊,不足的填充補齊。

當定義消息結構體時,消息發送方、接收方一定要使用相同的對齊方式,否則無法正確解析消息內容。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章