位域所占空间的大小

来源:互联网 发布:汽车设计软件发展趋势 编辑:程序博客网 时间:2024/05/22 04:23

    上一个项目中,遇到了一个问题:数据通过网络传输到不同的操作系统,反序列化时出现了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
原创粉丝点击