最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【待验证】位域与大小端的关系

工作和技术 crifan 1709浏览 0评论

转自:C语言中结构体、位域、大小端等相关概念

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                |

总结:大小端只影响具体变量的存储,如果使用位域,位域在变量中的分配和大小端无关,按正常的存储方式分配,即前面的位域成员存在地址的高位,后面的成员存放在地址的地位

转载请注明:在路上 » 【待验证】位域与大小端的关系

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
79 queries in 0.155 seconds, using 22.11MB memory