大牛们帮忙看看占了多少字节
void main()
{
struct stu
{
int num;
char name[20];
char sex;
int age;
float score;
char address[30];
}struct stu zhang,wang;
printf("%d",sizeof(zhang));
system("pause");
}
我在vs2012上面运行后说是68字节
但是我怎么数的是2+20+1+2+4+30=59
求指教???????????????? struct sizeof
[解决办法]
说明白点吧! 由于在x86下,GCC默认按4字节对齐。 SO:
4+20+4+4+4+(30+2)=68 最后一个加2字节,是因为: 32/4=8 可以整除! 所以最后当然是68字节啦!
[解决办法]
struct stu
{
int num;//4
char name[20];//20
char sex;//本来是1个字节的但由于要按4个字节对齐所以为4个字节
int age;//4
float score;//4
char address[30];//32是最小的对齐数
}
步骤:
1 首先找到结构体中,各个类型所占字节情况,确定m值,最大类型所占用的字节数即为m值。m值只能为1,2,4,类型大于4的则为4.
2 以找到的M值作为对齐条件去分析原结构体,不够M个字节的则补够M个字节来对齐。
如struct A {char a,int b,short c};那么m值为4,则这个结构体在内存中的分布为 axxx b___ c_xx(_为本身占用的字节大小,x为补全后的)
又如struct B {short a, char c};则m=2,a_c_ 占用4个字节的大小
以上是按照自己理解说的。
[解决办法]
首先一点。。int是4个字节。。不是2个字节。。另外,需要字节对齐。。不满4个字节的也占4个字节的空间。。所以答案为4+20+4+4+4+32 = 68。。
不明白的可以自己查一下什么是字节对齐。。