位域

来源:互联网 发布:淘宝一个差评都没有 编辑:程序博客网 时间:2024/05/05 17:39

如果结构体中含有位域,那么其规则是:

(1)如果相邻位域字段类型相同,且其位宽之和小于类型的sizeof(类型)大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止。

(2)如果相邻位域字段的类型相同,但其位宽之和大于类型sizeof大小则后面的字段将以新的存储单元开始,其偏移量为其类型大小的整数倍。

(3)如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采用不压缩方式,即不同位域字段存放在不同的位域类型字节中,而GCC和Dev-C++都采用压缩方式。

struct demo1

{

   int i:8;

   int j:4;

   int a:3;

   double b;

}

对于结构体demo1,i,j,a三个位域之和为15bit,小于sizeof(int)=32bit,所以根据上述规则1,i,j,a紧邻存储在一起,共占用4个字节,b为double类型,占8个字节,根据对齐规则,b必须存储在8的整数倍地址处,于是,在存储了i,j,a之后将填充4个字节,再存储b,于是 sizeof(demo1)=4(i,j,a的长度之和)+4(填充长度)+8(b的长度)=16
原创粉丝点击