0

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

我还打印了即将到来的 int 的大小 4。

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

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

4 回答 4

4

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

于 2013-05-03T16:48:30.850 回答
2

想象一个数组struct example

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

但是,一个int必须始终是 4 字节对齐的。6 个字节不能做到这一点,因此编译器将大小四舍五入为 8。现在数组中的每个 int 都是对齐的。

于 2013-05-03T16:49:51.933 回答
1

这是因为结构对齐填充

于 2013-05-03T16:47:32.280 回答
0

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

于 2013-05-03T16:48:15.907 回答