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));

相关内容

热门资讯

江苏首个春假“含娃量”爆棚,3... 现代快报讯(记者 胡玉梅/文 裴诗语/摄)南京红山森林动物园被学生们“承包”了,扬州中国大运河博物馆...
诗画山东|“樱”你而来 满城浪... 齐鲁网·闪电新闻4月3日讯 “初樱动时艳,擅藻灼辉芳。”四月已至,在东营市秋月湖公园,樱花树沿湖次第...
游园不受飞絮花粉困扰 重庆“避... 本文转自:人民网-重庆频道人民网重庆4月3日电 四月,重庆鹿山公园、花石公园内春意盎然,繁花似锦、游...
岳阳街道丨春色如许,何必远方!... 今天的四月的风,裹挟着淡淡的芬芳,吹绿了岸,也吹开了花。这一次,我们不赶路,沿着水岸慢慢走,去遇见春...
鹤壁淇滨:科技赋能樱花季 智趣... 来源:环球网春风送暖,樱飞鹤城。4月2日,以“鹤舞樱飞·向新而行”为主题的2026樱花季鹤壁文旅推介...
孙子文化园第五届花朝节在清明假... 齐鲁晚报·齐鲁壹点记者 乔显佳 通讯员 孙艳美今春,东营广饶全国唯一的兵家主题游乐园中国孙子文化园如...
视点|北小河春日游船启航,三大... 4月3日,“北京朝阳花园节暨醒春启航·2026游赏体验季”活动在北小河畔拉开帷幕。活动以“花园城市,...
潍坊安丘:一条“云端天路”,把... 本文转自:人民网-山东频道李子悦四月芳菲,春染安丘。4月2日,第十五届安丘辉渠桃花节在万亩桃林正式启...
安徽巢湖:水乡田园 多彩画卷 ... 来源:巢湖市委宣传部眼下,随着气温持续回暖,巢湖市中垾联圩万亩田野上,成片油菜花正值盛花期,金黄铺展...
深圳一网红公园紧急闭园!一度大... 近日备受关注的深圳龙岗山花烂漫公园在开园不足两个月后突然宣布闭园整改引发市民热议这座于2026年春节...
青岛中山公园樱花初绽 市民游客... 本文转自:人民网-山东频道 人民网青岛4月3日电 (记者刘颖婕)4月初,春风拂过胶州湾,青岛中山公园...
春天里的中国丨多地旅游场景上新... 春回大地,万物复苏。各地不断升级新场景、新体验,激发文旅新活力。河南开封 沉浸式非遗体验受欢迎在河南...
“赏花”主题拉动400余项促消... 北京青年报记者昨日从市商务局获悉,4月促消费活动紧扣“赏花·花满京城”主题,联动推出400余项重点促...
文明旅游 | 清明出行,让文明... 清明假期,踏青赏花、滨江漫步、祭扫追思正当时。宝山文旅温馨提示广大游客:文明出行,安全相伴,共赴宝山...
“小而美”文旅焕新城市活力! ...   黑龙江网讯(记者 石启立 白林鹤)为深入贯彻落实国家“十五五”规划关于文旅融合高质量发展的部署要...
古村晨雾美如画 古村晨雾美如画...   2026年4月2日,春雨初霁的安徽省黄山市黟县卢村晨雾弥漫,金黄的油菜花田与粉墙黛瓦的徽派民居在...
看北京|法源寺丁香迎盛花期,引... 4月2日,北京西城区法源寺丁香进入盛花期,紫白繁花缀满枝头,幽香弥漫寺院,迎来大批市民游客赏花拍照。...
安徽铜陵:春风送暖 繁花似锦 ... 本文转自:人民网-安徽频道 4月2日,铜陵市义安区天门镇高联村四百亩樱花竞相绽放,粉白相间、如云似霞...
从画里长出来的春天!南京碑亭巷... 现代快报讯(记者 卢河燕/文 吉星/摄)四月的南京,碑亭巷迎来年度限定浪漫。近百米黄木香沿墙倾泻,嫩...
上海新地标:苏州河畔来了一艘“... 上海不止有LV巨轮,苏州河畔也来了一艘“白色巨轮”。就在乍浦路桥边上,近日,虹书舫正式对外开放,成为...