typedef union {long i; int k[5]; char c;} DATE;
struct data { int cat; DATE cow; double dog;} too;
DATE max;
void main()
{
printf("%d/n",sizeof(struct data)+sizeof(max));
}为什么是52
如果默认以最大字节对齐sizeof(DATE)应该是3*20=60 sizeof(data)=20总共是80
问题补充:按double 对齐,cat和k[0]可以放在一个double里面,
k[1]k[2]可以放在一个double里面,
k[3]k[4]可以放在一个double里面,
dog放在一个double里面,
所以一共4个double,也就是32……
所以,答案就是32+20=52……
这段不懂
为什么是“cat和k[0]可以放在一个double里面,
k[1]k[2]可以放在一个double里面,
k[3]k[4]可以放在一个double里面”???
--------------------------------------------------------------------
是这样滴,
sizeof(max)=20没有意见 // 取最大
sizeof(struct data)为什么会是32呢?
你可以试一下
struct data1{int cat;double dog;}
sizeof按最大字节对齐,答案是16,很好。
struct data1{int cat;int pig;double dog;}
sizeof按最大字节对齐,答案也是16,WHY。
因为按8字节对齐,int cat和int pig可以放在一起,也就是一个8字节里面。
struct data1{int cat;double dog;int pig;}
sizeof按最大字节对齐,答案是24,WHY……
因为按8字节对齐,int cat和int pig不可以放在一起……内存里面是:cat 空4字节…dog…pig 空4字节
如此,可以再回来看sizeof(struct data)
实际上是求sizeof(int cat; int k[5]; double dog;}),对吧?
按double 对齐,cat和k[0]可以放在一个double里面,
k[1]k[2]可以放在一个double里面,
k[3]k[4]可以放在一个double里面,
dog放在一个double里面,
所以一共4个double,也就是32……
所以,答案就是32+20=52……
k[1]k[2]可以放在一个double里面,
k[3]k[4]可以放在一个double里面,
dog放在一个double里面,
所以一共4个double,也就是32……
所以,答案就是32+20=52……
这段不懂
为什么是“cat和k[0]可以放在一个double里面,
k[1]k[2]可以放在一个double里面,
k[3]k[4]可以放在一个double里面”???
--------------------------------------------------------------------
是这样滴,
sizeof(max)=20没有意见 // 取最大
sizeof(struct data)为什么会是32呢?
你可以试一下
struct data1{int cat;double dog;}
sizeof按最大字节对齐,答案是16,很好。
struct data1{int cat;int pig;double dog;}
sizeof按最大字节对齐,答案也是16,WHY。
因为按8字节对齐,int cat和int pig可以放在一起,也就是一个8字节里面。
struct data1{int cat;double dog;int pig;}
sizeof按最大字节对齐,答案是24,WHY……
因为按8字节对齐,int cat和int pig不可以放在一起……内存里面是:cat 空4字节…dog…pig 空4字节
如此,可以再回来看sizeof(struct data)
实际上是求sizeof(int cat; int k[5]; double dog;}),对吧?
按double 对齐,cat和k[0]可以放在一个double里面,
k[1]k[2]可以放在一个double里面,
k[3]k[4]可以放在一个double里面,
dog放在一个double里面,
所以一共4个double,也就是32……
所以,答案就是32+20=52……