当前位置:编程问答 > C/C++ >

关于结构体字节对齐

问题:struct node { char a; char b; short c; int d; }A; struct node2 { char a; short c; char b; int d; }B; 这两个结构体若以4字节对齐,为什么sizeof(A)=8,而sizeof(B)=12呢?
补充:我的疑问是为什么结构体B中的b和a,c不是放在同一个4字节里呢??
为什么不是char后面紧跟着short然后再接着char;谢谢指导~~
追问:是的,是按顺序排列啊,我觉得在一个4字节里可以按顺序排放a、c、b;就是搞不懂为什么b放到下一个4字节里去了但是在B中,a,b,c也可以凑够4字节啊??那为什么要把a、c和b分开呢??我的疑问是为什么B里面的b要另起一行,而不是跟a,c放在一起呢??
答案:为什么B里面的b要另起一行,而不是跟a,c放在一起呢??

结构的定义是每个成员的地址是按顺序排列的,不能随便排的。
其他:因为两个short的位置不一样 第一个 就等于1+1+2+4  但是第二个 先是1 然后就是2 这个时候就要另起一行了 b就要存在下一个4字节中 所以就是(1+2+1)+(1+3)+4  第一个是a+c  第二个就只有b  最后是d 我觉得,如果要求可移植最好还是不用对齐。
对齐虽然速度会快,但是行为很不确定。
解释有很多,但其实没有正确的。
解释只是每个人的理解,标准中没有说。
所以写编译器的人还可以有其他理解,这样根本就不会存在正确。 

上一个:function does not take parameters.c语言题目,统计字母个数
下一个:在mfc中点击按钮如何显出程序的运行结果,运行的结果是在另一个编辑框.结果如下图:

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,