我有个很奇怪的问题
我定义了一个结构struct gg
{
char aa[10];
}当我 printf("%d",sizeof(gg));的时候显示是10但是当我的结构修改成struct gg
{
char aa[10];
int bb;
}居然变成了 16?如果我 单独的struct gg
{
int bb ;
}那么就是4最后如果我修改成struct gg
{
char aa[10];
int bb ;
WORD cc[25];
}你猜多少? 居然是68 我不知道为什么 我想他如果是64 就完美了。谁能帮我解答下吗?谢谢

解决方案 »

  1.   

    “Struct member aligment”改为1 byte,那么定义多少就多少了
      

  2.   

    是内存对齐的原因要对齐到4的倍数10字节会对应成 12  然后加4 就成了16了
    struct gg { char aa[12]; int bb; }看看这样是多少
      

  3.   

    默认的好像是#pragma pack(8)
      

  4.   

    正常啊,这个就是对齐的问题,int必须以4倍数的地址为开始地址,而且结构如果有int了,结构将以4对齐..........
    具体可以参考:
    http://www.cnblogs.com/phoenix-rock/archive/2008/02/01/1061489.html
      

  5.   

    内存对齐,或者叫字节对齐的原因,编译器选项中可以设置对齐方式,也可以用#prama pack()来设置。