何时在结构中填充和对齐

  • 本文关键字:对齐 填充 结构 何时 c
  • 更新时间 :
  • 英文 :


有人问了类似的问题,但答案并没有特别解决我的困惑。

我已经玩了几个月的C,我一直认为sizeof(AnyStruct)将是四的倍数,直到我来到这个:

#include <stdio.h>
typedef struct
{
int x;
char y;
} S1;
typedef struct
{
char x[4];
char y;
} S2;
int main()
{
printf("%dn", (int)sizeof(S1));
printf("%dn", (int)sizeof(S2));
return 0;
}

输出为

8
5

关于为什么对齐在 S2 中不起作用但在 S1 中起作用的任何解释?

一般来说,它什么时候有效,什么时候不工作,以及它是如何工作的。

结构对齐到具有最大对齐要求的成员大小的倍数。如果所有元素都char,对齐要求是1。

这样,结构数组始终具有大小元素大小x元素数,这是C编程语言的一个很好的属性,因为它使任何类型的数组的动态分配变得简单。

最新更新