關於struct呼叫sizeof的乙個問題

2021-06-27 18:50:13 字數 675 閱讀 7133

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...