请帮我分析一下字节计算问题?
32位机,采用字节对齐。
struct a {
char t:4;
unsigned short i:8;
char k: 4;
};
count<<sizeof(a)<<endl ; //为什么输出的结果是6啊,我分析来分析去应
//当是4啊。
请帮我解决一下,谢谢!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
字节对齐按照自身大小和制定的大小的较小值进行,类之间按成员最大值和制定参数的最小值进行
默认4字节对齐的话
struct a {
char t:4; //自身为1,较小,按一字节对齐 放在位置 0
unsigned short i:8; //自身为2,较小,按2字节对齐, 放在2,3位置
char k: 4; //自身为1,较小,按一字节对齐 放在位置4
};
上述实际占用了5个字节,
类之间按最大成员 unsigned short 进行,即按2对齐,5按2对齐即为6,所以sizeof=6
楼上的,我的测试结果与你的相同;
是不是于gcc的版本有关系,我这是3.4.3版本的!!
#include <stdio.h>
struct a {
char t:4;
unsigned short i:8;
char k: 4;
};
int main(void){
printf("%dn",sizeof(struct a));
}
输出是2
里面只讲到了\整个类型,没有讲到位的字节对齐啊.
比如:
struct a {
int a : 8;
int b : 8;
int c : 8:
};
与
struct b {
int a : 8;
char c : 4;
int d : 8;
};
怎么计算呢?
可以参考:
http://bbs.chinaunix.net/viewthread.php?tid=844212&highlight=关于sizeof
里面有详细的说明!
不对啊,按你的分析方法,下面的应当是12而不是8啊,但计算输出是8。
struct a {
char t:4;
unsigned int i:8;
char k: 4;
};
字节对齐,
第一个 1字节
第二个 2,
但是要对齐,所以第一个凑齐2个字节
同理第三个也要凑齐2个字节
所以一共6个字节
如果你把第一个和第三个定义在第二个short前
那么应该是 4字节