计算结构尺寸

时间:2013-05-03 16:45:09

标签: c

我有一个结构,我编写了以下代码来打印结构的大小。 虽然我期待“6”,但我得到“8”作为结构的大小。 sizeof(int)+ sizeof(char)+ sizeof(char)= 4 + 1 + 1 = 6.如果我评论结构的int部分,我得到理想的结果(即结构的大小为2)

我还打印出了即将出现的int的大小。

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

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

4 个答案:

答案 0 :(得分:4)

编译器有时会添加填充以使结构更有效。

答案 1 :(得分:2)

想象一下struct example

的数组

数组中的每个条目必须为sizeof(struct example)个字节。

然而,int必须始终为4字节对齐。 6个字节不能这样做,因此编译器将大小舍入为8.现在,数组中的每个int都是对齐的。

答案 2 :(得分:1)

这是因为结构alignment and padding

答案 3 :(得分:0)

这可能是因为,在许多架构中,大多数编译器会在结构中插入额外的填充以帮助正确对齐。在这种情况下,看起来结构被填充到偶数倍的字大小的值。在32位处理器上,字长为4个字节。