64位與32位linux c開發時預設位元組對齊方式分別為8和4。
在預設情況下,32位作業系統位元組對齊方式是4個位元組,但64位作業系統,位元組對齊是8個位元組。
看下面的例子
#include typedef union data;
int main(int argc,char **argv)
上面的執行結果是 【 20 】(64位機器)
再看下面的例子
#include typedef union data;
int main(int argc,char **argv)
上面的執行結果是 【 24 】,按照一般情況,我們是說union的位元組數大小是等於最大的那個,就是20。。。。。
再看乙個例子
#include typedef union data;
int main(int argc,char **argv)
上面的執行結果是 【 16 】
其實上面的結果就是對齊之後的結果,特別是24的,它是從第三個8個位元組位置開始對齊。所以它的大小是 int data[4] + long。
因此,在計算結構體的sizeof時,不但要考慮對齊的位元組數,還要考慮開始對齊的位置,其實也就是對齊方向(大端小端的問題了)
關於STRUCT的幾點認識
1.struct 的巨大作用 面對乙個人的大型 c c 程式時,只看其對struct 的使用情況我們就可以對其編寫者的程式設計經 驗進行評估。因為乙個大型的c c 程式,勢必要涉及一些 甚至大量 進行資料組合的結構體,這些結 構體可以將原本意義屬於乙個整體的資料組合在一起。從某種程度上來說,會不會用...
關於struct對齊的實驗
實驗環境 win7 32位 vc 6.0 實驗 include using namespace std struct a pragma pack push pragma pack 1 struct b struct c pragma pack pop struct d int main int ar...
關於Union和Struct對齊
關於union,struct,還有機器數賦值,總是感覺自己認識不是特別深刻,這裡使用小demo程式加以說明,具體的詳細細節描述其它地方已經有說明和記錄,這裡不再說明。include union myun u int k a int main output size is 12 0 5 6 說明 in...