C语言 位域中占有字符大小的计算和位域填充的作用
admin
2023-04-22 13:09:53
0

#include

#include

struct EIGHT_BYTE

{

    _Bool opaque :1;

    unsigned int fill_color :3;

    unsigned int :4;

    _Bool show_border :1;

    unsigned int border_color :3;

    unsigned int border_stype :2;

    unsigned int :2;

} eight_byte;

 

int main(void)

{

 

   printf("sizeof eight_byte is : %lu\n", 

   sizeof(eight_byte));

   return 0;

 

}

-----------------------

上面的位域结构体占用的字节是16字节,我好像大概能理解为什么是16字节,但是不太明白的是为什么需要填充"unsigned int :4;“ 和“    unsigned int :2;”。这两个好像是用来是字节对齐,但是没太明白到底是怎么个对齐法?

在结构体中,如果有不同类型的成员变量,那么它们引逐本无宽在内存中的存放位置有可能不是连续的。为了提高读取和写入数据的效率,计算机一360问答般按照某种规则将结构体的成员变量排少庆量克须突云皮宗除思列在一起,而这个规则就是字节对齐。 在字节对齐中,编译器一般按照以下规则进行填充: 第一个成员变量放在最开始的位置; 后续的成员变量按照其类型长度占用的字节数进行对齐,比如 cha分维及积r 类型占用 1 个字节,int 类型占用 4 个字节; 如果结构体中的成员变量长度之和不是 2 的幂次方,则进行字节填充,使得结构体的长度变为 2 的松护幂次方。 根据上述规则,我们可以分析结构体 EIGHT_BYTE 的占用空间为: _Bool opaque :1; 占用 1 个 bit,计右社的体业不需要字节对齐; unsigned int fill_color :3; 占用 3 个 bit,不需要字节对齐; unsi守滑武女又号gned int :4; 占用 4 个 bit,需要字节对齐; _Bool show_border :1; 占用 控圆够秋合晚1 个 bit,不需要字节对齐; u规多委外nsigned int border_color 露圆教多试官粮宜福:3; 占用 3 个 bit,不需要字节对齐; unsigned int border_stype :2; 占势边粒氧功表修理用 2 个 bit,不需要字节对齐; unsigned int :2; 占用 2 个 bit,需要字节对齐。 因为 unsigned 善水划重哥视找int 的长度为 4 个字节,所以每个 unsigned int 类型的成员变量占用的空间为 4 个字节。所以,由于 "unsigned in喜程友台t :4;" 和 "unsigned int :2;" 的长度之和为 4 + 2 = 6,不是 2 的幂次方,需要进行字节填充。 最终,结构体 EIGHT_BYTE 的占用空间为: 1 + 3 + 1 + 3 + 2 + 2 + 4 = 16 字节。 需要注意的是,不同的编译器对字节对齐的处理可能会有所不同。

在求职笔试中,C中的位域是一个常考点,特别是在嵌入式软件中更常见。位域的最大样待好处是可以根据自己需要定制位数,从而节省空间,例如:嵌入式编程稀缺的内存资源。还有在网络通讯中,对头信息部分的结构定义也常用到位域,少传输轴或延一位是一位啊。
这里来分析EMC的一道笔试题(07年招聘试题):
1
typedef struct
bitstruct 2 { 3 int b1:5; 4 int :2; 5 int b2:2; 6 }bitstruct; 7 int main(int argc, char
*argv[]) 8 { 9 bitstruct b; 10
printf("%d\n",sizeof(bitstruct));

相关内容

热门资讯

大理洱源县境内的G214国道擅... 相较而言,这条G214国道在自驾圈或者骑行圈都没什么名气,但实际上,它的全程有2961公里,会经过青...
哈尔滨冰雪大世界开园实拍,网友... 今天,第二十七届哈尔滨冰雪大世界正式开园迎客,面积达120万平方米,规模为历届之最。你想去打卡吗?
重庆璧山:冬至到元宵文旅活动畅... 封面新闻记者 李茂佳12月17日,封面新闻从重庆市璧山区举行的2025年冬季文旅系列活动新闻发布会上...
黑龙江强化冬季冰雪旅游市场价格... 本文转自:人民网-黑龙江频道发布会现场。黑龙江省市场监管局供图人民网哈尔滨12月17日电 (记者张齐...
记者探园:哈尔滨冰雪大世界白天... 本文转自:人民网-黑龙江频道 人民网哈尔滨12月17日电 12月17日,第二十七届哈尔滨冰雪大世界正...
赏冰灯、逛花灯,延庆龙庆峡冰灯... 新京报讯(记者曹晶瑞)12月17日,记者从延庆区获悉,目前,龙庆峡风景区正在紧锣密鼓地布置花灯,冰灯...
北京官方版网红打卡地再上新,3... 新京报讯(记者吴婷婷)“北京到底有谁在?”一句影视剧中的台词牵出短视频里的众多北京景点。12月17日...
“尔滨”吸引力再加码!芝士芝麻... 冰城哈尔滨今冬又一冰雪盛宴进入开幕倒计时。12月17日,记者走进太阳岛风景区实地探访,以“冰天雪地 ...
旅超|两天一夜,解锁长宁23个... 旅行探险家们,欢迎“乘坐”第一届“域见上海”旅游攻略超级大赛的列车,一起解锁上海长宁区的“隐藏剧情”...
“冷资源”变“热经济”,冰雪旅... 凌晨,金祖峰峰顶的直播间里,博主王海庭正在等待日出,手机屏幕另一端,是近十万名网友与他的共同守望。一...
湖北竹山:上庸鲜花小镇绽放别样... 来源:新华网上庸鲜花小镇坐落于古庸国故地,位于湖北省十堰市竹山县上庸镇,地处南水北调中线工程核心水源...
缤纷冬日景如画 12月17日,游客在江苏苏州虎丘湿地公园赏景游玩。冬日时节,各地美景缤纷如画,吸引众多游客赏景游玩。...
周年观察·体验感拉满、丝滑感升... 央视网消息:2024年12月17日,中国240小时过境免签政策正式实施,2025年12月17日已满一...
守护散落乡野的中小石窟   新华社北京12月17日电 12月17日,《新华每日电讯》发表题为《守护散落乡野的中小石窟》的报道...
元旦出行 云南多地居自驾热门目... 云南网讯(记者彭锡)2025年12月31日跨年火车票已正式发售,2026年元旦三天假期的出行热潮也提...
赏“枫”正当时!来崇明这里邂逅... 点击关注悠哉崇明,发现更美的崇明秋冬交替,层林尽染。眼下,东平国家森林公园迎来了一年中最美的赏枫季。...
赏星光、游雪境、感受摩登城市魅... 冬季的步伐悄然而至,城市气温渐凉,节日氛围也开始变得温暖浓厚。兴业太古汇以中法文化联动打造城市美学地...
陕西汉中:文旅这碗饭,村民们吃... 站在自家民宿门前,陕西省汉中市留坝县火烧店镇村民罗英笑得自信而灿烂。“山里空气好,欢迎更多游客等天暖...
打造“中国古镇入境游第一站”,... “Look,Look!”傍晚,青浦朱家角古镇西井街的一家非遗内画商铺前,秦师傅拿着自己刚为外国游客T...
张家界“荒野求生”冠军总奖金增... 12月16日晚,张家界七星山景区总经理田健兵在个人社交账号上发布视频称,给张家界七星山荒野求生挑战赛...