如果我实现下面的代码,我的sizeof(*zip)输出是56. [10 + 10 + 4 + 4*8] byte = 56
typedef struct{
char a[10];
char b[10];
int c;
double d,f,g,h;
}abc_test;
abc_test zip[] =
{
{"Name" ,"Gender", 0,100,200,300,400},
{"Name" ,"Gender", 0,100,200,300,400}
};
Run Code Online (Sandbox Code Playgroud)
但是当我实现下面的代码时,我的sizeof(*zip)输出是440. [100 + 100 + 100 + 100 + 4 + 4*8] = 436,我的问题是另外4个?
typedef struct{
char a[100];
char b[100];
char i[100];
char j[100];
int c;
double d,f,g,h;
}abc_test;
abc_test zip[] =
{
{"Name" ,"Gender","age","mode", 0,100,200,300,400},
{"Name" ,"Gender","age","mode", 0,100,200,300,400}
};
Run Code Online (Sandbox Code Playgroud)
一般的答案是,无论出于何种目的,编译器都可以在成员之间自由添加填充(通常是对齐要求).
具体答案是您的编译器可能正在将double成员对齐到8字节边界.在第一个不需要填充的示例中.在第二个例子中,它需要在int c成员之后填充4个字节.