首先,引入兩個概念「資料型別大小」和「指定對齊值」:
資料型別大小:char 為 1 個位元組,short 為 2 個位元組,int 為 4 個位元組,double為 8 個位元組等等;
指定對齊值:#pragma pack (value) 所指定的對齊的值,例如 g++ 4.5.2 x86 預設值為 4;
引入乙個重要的概念——有效對齊值 n:
有效對齊值 n= min( (1), (2)),即:「資料型別大小」與「指定對齊值」的最小值。
在 c / c++ 語言中,需要同時滿足如下a、b兩個條件:
例如:
struct a ;
筆者機器的預設指定對齊值為4,分析:
所以,上述結構體總共大小為 24 個位元組。
C C 位元組對齊
什麼是對齊,以及為什麼要對齊 現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體位址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的作用和原因 各...
c c 位元組對齊
什麼是對齊,以及為什麼要對齊 現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體位址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的作用和原因 各...
C C 位元組對齊
概念 對齊跟資料在記憶體中的位置有關。如果乙個變數的記憶體位址正好位於它長度的整數倍,他就被稱做自然對齊。比如在32位cpu下,假設乙個整型變數的位址為0x00000004,那它就是自然對齊的。為什麼位元組需要對齊 根本原因在於cpu訪問資料的效率問題。假設上面整型變數的位址不是自然對齊,比如為0x...