3、位域的概念
使用位域的主要目的是压缩存储,其大致规则为:
1) 如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字
段将紧邻前一个字段存储,直到不能容纳为止;
2) 如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字
段将从新的存储单元开始,其偏移量为其类型大小的整数倍;
3) 如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩方
式,Dev-C++采取压缩方式;
4) 如果位域字段之间穿插着非位域字段,则不进行压缩;
5) 整个结构体的总大小为最宽基本类型成员大小的整数倍。
如果有WORD类型的位域,如下:
struct
{
WORD len:10;
WORD res:1;
WORD is_pcm:1;
WORD pcm_slot:4
}
则各成员的存储方式为:
—————————>>>>>>>>>>内存地址增大的方向
pcm_slot |is_pcm|res | len |
| | | | | | | 10bit |
总结:大小端只影响具体变量的存储,如果使用位域,位域在变量中的分配和大小端无关,按正常的存储方式分配,即前面的位域成员存在地址的高位,后面的成员存放在地址的地位。
转载请注明:在路上 » 【待验证】位域与大小端的关系