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

相关内容

热门资讯

新民大街亮出文旅成绩单 新民大... 本文转自:人民网人民网记者 李洋人民城市为人民,新民更新更自信。2025年,长春市启动新民大街历史文...
上海迪士尼室外游乐项目,怎么都... 上海迪士尼乐园多个室外游乐项目临时关闭。截图新京报贝壳财经讯(记者俞金旻)7月3日下午,受雷电黄色预...
中韩旅游“蜜月期”来了? 中韩... 【文/观察者网 邓军 编辑/赵乾坤】 据韩联社、新加坡《联合早报》报道,韩国文化体育观光部部长崔辉永...
奥森北园“花田野趣”焕新,向日... 近日,第三届北京朝阳花园节暨第十五届奥森花卉观赏季葵花展启幕,北园“花田野趣”焕新升级。园区依据光照...
九寨沟一男子被挤落入钙化池,游... 今日(7月3日)#九寨沟一男子被挤下步道落入钙化池#话题登上微博热搜引起网友热议近日,有游客反映在九...
三亚:全市涉山涉海涉空景区暂停... 7月3日,三亚市旅游和文化广电体育局发布关于涉山涉海涉空景区暂停营业的通知:根据市三防指挥部研判部署...
走,哪凉快哪待着去! 走去最凉... 本文转自:人民网四季如春的云南藏着一座“秋城”位于乌蒙山间滇川黔三省交界处的云南昭通这里夏有凉风、冬...
苏州·甪直,我愿意N刷的古镇!... 来过甪直,就不舍得离开在这里,时间变得很慢很慢徜徉其中,仿佛真的能做一回生于古镇、长于古镇的“画中人...
体荟四季|暑假去哪玩?长三角溯... 暑假如期而至想好怎么带娃出门清凉一“夏”了吗?为你精选了5处长三角溯溪好去处竹林溪涧、峡谷飞瀑、鱼鳞...
2026“夏凉菌香游云南”禄丰... 6月30日,云南省2026年“夏凉菌香游云南”暨暑期旅游禄丰专场推介活动在禄丰世界恐龙谷启幕。作为国...
深山溶洞惊现千年工事,灶台古井... 走进曲靖麒麟区连绵不绝的深山之中,藏着一处极少被大范围宣传的天然溶洞,依靠山体岩石人工开凿扩建而成,...
山间砂岩刻下盟约,曾经驿道地标... 站在云南寻甸与马龙交界的关索岭山顶,不少本地年长居民都听家中长辈讲过一件流传几百年的旧事。这座扼守滇...
逛花街、看演出、品美食 南川首... 00:376月29日,随着南川区委书记马奇柯一声“开园”,该区首个“文化+剧场+餐秀+游乐”一体化沉...
“两江游”只能一家独有?重庆一... 封面新闻记者 宋潇“两江游”是重庆的特色城市文旅名片之一,有公司瞅准了其中的商机,先是抢注商标,然后...
一碗羊肉汤的“接二连三”:看布... 本文转自:人民网-四川频道吉拉布拖黑绵羊餐厅正式开门迎客。杨飞供图近日,国家4A级旅游景区西昌建昌古...
赣州添动漫文旅新地标,功夫动漫... 6月27日,功夫动漫世界乐园开园仪式暨第四届城市超级IP产业发展大会在赣州南康隆重举行。来自全国48...
渝见好“村”光|万盛经开区北门... 万盛黑山镇的北门村,农业农村部官方认证的“2024年全国美丽休闲乡村”。距重庆中心城区85公里,平均...
晨读   曹伟明:古老水村 晨... 徐程 摄五月的风,带着江南青绿的温润与轻柔,我随上海文史馆“沪派江南·海上名家”乡村行,来到上海淀山...
老昆明人的滇池乡愁全在这,逛完... 周末想找一处既能看湖、赏古建,又能静下心读一段本地历史的近郊去处,多数昆明人第一反应会想到捞渔河、海...
不止网红水上森林!捞渔河的十年... 在昆明人的短途出行清单里,捞渔河湿地公园永远占据着一个特殊的位置。它没有翠湖的人声鼎沸,没有西山的险...