有人问了类似的问题,但答案并没有特别解决我的困惑。
我已经玩了几个月的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编程语言的一个很好的属性,因为它使任何类型的数组的动态分配变得简单。