我有一个结构,我编写了以下代码来打印结构的大小。 虽然我期待“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));
}
答案 0 :(得分:4)
编译器有时会添加填充以使结构更有效。
答案 1 :(得分:2)
想象一下struct example
。
数组中的每个条目必须为sizeof(struct example)
个字节。
然而,int
必须始终为4字节对齐。 6个字节不能这样做,因此编译器将大小舍入为8.现在,数组中的每个int都是对齐的。
答案 2 :(得分:1)
这是因为结构alignment and padding。
答案 3 :(得分:0)
这可能是因为,在许多架构中,大多数编译器会在结构中插入额外的填充以帮助正确对齐。在这种情况下,看起来结构被填充到偶数倍的字大小的值。在32位处理器上,字长为4个字节。