2013-05-03 72 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都是对齐的。