#include<stdio.h>
int main()
{
struct test
{
char c;
int y;
float r;
double d;
} t1;
printf("%d\n",sizeof(t1));
return 0;
}
输出:我的 gcc 4.3.2 Ubuntu 12.04 上的 24
输出:运行代码的 Ideone 链接上的 20
我的解释: 我认为 24 是对的。如果我错了,请纠正我?
- 第一个块将被 Char 'c' 占用。1 个字节为自己,后跟 3 个字节的填充。
- 第二块将由整数'y'占用。(在这种情况下不需要填充,因为整数是 4 字节。所以它将完全填充块)。
- 第 3 个块将被 float 'r' 占用。(不需要填充,因为 float 也是 4 个字节)。
- 现在将填充下一个 4 字节的块,因为 next 是双倍的。并且存储地址必须是该数据类型大小的倍数。
- 接下来的 2 个 4 个字节的块将被双变量占用。
因此Size = 1(char) + 3(Padded in Char case) + 4(int) + 4(float) + 4(padded for Double) + 8(double) = 24
为了清晰:
由于块被采用 4 字节集合。所以每个地址都是 4 的倍数。对于 double ,下一个地址必须是 1012。但它不是 8 的倍数。所以填充它!并从 1016 我的问题开始 - 24 是否正确,我的解释是否正确,或者我的解释是错误的,请解释一下?