2014-05-19 38 views

回答

6

這使得c保持在X陣列的8字節邊界上對齊。

X x[2]; 

X[0]: 
0-3 unsigned int a 
4-7 unsigned int b 
8-15 double  c 
16-19 unsigned int d 
20-23 [PAD] 
X[1]: 
24-27 unsigned int a 
28-31 unsigned int b 
32-39 double  c 
40-43 unsigned int d 
44-47 [PAD] 

因此,你可以看到你需要4個字節的數組元素之間的墊。這是通過在對象的末尾添加4個字節來捕獲的。如果第二個數組元素從位置20開始,那麼您會發現x[1].c不是8字節對齊的。

因此,最後,d確實從字節16開始,如您所料,但d的結尾不是對象的結尾。

+0

好吧..謝謝有什麼辦法可以使大小20爲同一個結構? – user3651312

+0

請參閱進一步的編輯說明。 – Keith

+0

不,如果您的意思是「我可以重新訂購以減少存儲空間」,我不知道如何。 – Keith

1

在POD結構這樣的,struct的地址是它的第一個元件的地址。大小是類型爲X[]的數組的連續元素之間的存儲器中的距離。對於double在一個假設的陣列的第二元件對準,所述第一int和整個struct必須對準到相同的嚴格性爲double。這最後需要填充。

0

在哪個平臺上運行?在我的Ubuntu機器上它只給我輸出20! 的sizeof unsigned int類型是4和雙是8和這就是爲什麼輸出是20 我的機器上! 這從硬件到硬件有所不同!