2013-05-03 103 views
0

我有一個結構,我寫了下面的代碼來打印結構的大小。 儘管我期待「6」,但我得到「8」作爲結構的大小。 sizeof(int)+ sizeof(char)+ sizeof(char)= 4 + 1 + 1 = 6.如果我評論結構的int部分,我會得到理想的結果(即結構的大小爲2)計算sizeof結構

I還打印出來的int的大小即將到來4.

typedef struct example 
{ 
    int one;  
    char two; 
    char three; 
}example; 

int main() 
{ 
    printf("value %d %d ",sizeof(example),sizeof(int)); 
} 
+0

這是由於對齊,你的結構是4字節對齊。 http://stackoverflow.com/questions/119123/why-isnt-sizeof-for-a-struct-equal-to-the-sum-of-sizeof-of-each-member – birryree 2013-05-03 16:47:29

+0

因此,你可以放心地把結構放入一個數組和'int'成員將被正確對齊。 – Bill 2013-05-03 16:50:45

回答

0

這可能是因爲,在許多體系結構中,大多數編譯器在結構中插入附加填充以幫助正確對齊。在這種情況下,它看起來像是將結構填充到甚至多個字大小的值。在32位處理器上,字大小爲4個字節。

4

編譯器會在有些時候添加填充以使結構更高效。

2

想象一下struct example的數組。

數組中的每個條目必須是sizeof(struct example)個字節。然而,int,必須始終是4字節對齊。 6個字節不能這樣做,所以編譯器將大小調整爲8。現在陣列中的每個int都是對齊的。