C 结构大小冲突

C 结构大小冲突,c,C,我在C中创建了两个变量数相同的结构:3个整数和3个字符。 当我使用sizeof操作符查看每个结构实例的大小时,我得到两个不同的值。我想知道为什么会发生这种情况,下面是我的代码:我尝试用相同的结果重新排列变量 typedef struct a { int x; char a; int y; char b; int z; char c; }s1; typedef struct b { int x; int y; int z; char a; char b; char c; }s2; int ma

我在C中创建了两个变量数相同的结构:3个整数和3个字符。 当我使用sizeof操作符查看每个结构实例的大小时,我得到两个不同的值。我想知道为什么会发生这种情况,下面是我的代码:我尝试用相同的结果重新排列变量

typedef struct a
{
int x;
char a;
int y;
char b;
int z;
char c;
}s1;

typedef struct b
{
int x;
int y;
int z;
char a;
char b;
char c;
}s2;

int main()
{
printf("%d %d\r\n", sizeof (s1), sizeof (s2));
return 0;
}

简单地说,处理器根据字长对齐变量。本例中的整数在4字节边界处对齐,因此当您交错字符和整数时,每个字符后面的3个字节不被使用。
请参阅:

这几乎可以肯定是由于单词对齐,这两个结构之间会有所不同,因为成员的顺序不同。是否有一个特定的对齐规则。还要注意,打印sizeof给出的大小的正确格式是十进制输出的%zu。@Someprogrammerdude:我在该图表中看到了u,但z做了什么?