位域所占空间的大小

2 篇文章 0 订阅

    上一个项目中,遇到了一个问题:数据通过网络传输到不同的操作系统,反序列化时出现了segment fault。调试时发现原来是同一个结构体,在不同的操作系统(windows和linux)中,所占的空间大小不一样,因此反序列化时就出现了问题。这个结构体是类似如下定义的:

struct Test{
	char a : 2,
	int b : 3,
};
    默认情况下,gcc编译器下,结构体大小为4个字节,在vc++编译器下,它的大小却是8个字节。最初,我以为是字节对齐导致两个编译器下,结构体大小的不同。然而当我改变其字节对齐的大小时,发现结构体大小仍然不一样。观察了这个结构体的定义,进行了如下改变:

struct Test{
	char a : 2,
	char b : 3,
};
    此时,再在两个编译器下尝试,结构体大小相等。因此,就可以得出结论,在gcc编译器下,相邻位域的空间大小是可以合并的,即使它们类型不同;而vc++环境下,如果相邻位域类型不同,那么他们分别按照最大位域所占的字节数对齐。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值