位段是什么玩意?你听说过吗??

当我们学完结构体之后,我们就要好好学学结构体实现位段的能力!!!

目录

一、位段是什么?

二、位段的内存分配

三、位段的跨平台问题

总结


一、位段是什么?

  1. 位段的声明和结构体大体相同,但是有两点不一样。

1.位段的成员必须是int ,unsigned int ,或者 signed int。

2.位段的成员后面必须有一个冒号和一个数字。

for example

struct A
{
    int _a:2;
    int _b:5;
    int _c:10;
    int _d:30;
};

那么A就是一个位段类型,那么位段A的大小是多少呢???

printf("%d\n",sizeof(struct A));

二、位段的内存分配

1.位段的成员可以是int,unsigned int ,signed int 或者char(他也属于整形家族哦!!!)

2.位段上的内存是需要按照4个字节(int)或者1个字节(char)的方式来开辟的!

3.位段涉及很多不确定因素,位段不是跨平台的,当我们使用可移植的程序时,应该注意避免位段的使用。

位段是什么玩意?你听说过吗??_第1张图片

 每次只会先开辟一个空间,如果不够了则会开辟下一个空间,大大节省了内存

三、位段的跨平台问题

1.int 究竟是有符号还是无符号这是不确定的。

2.位段中最大位的数目不能确定(16位,32位。。。。。)

3.位段中成员在内存从右往左,还是从左往右没有定义。

4.当结构体包含两个位段时,第二个位段成员较大,第一个位段剩余的位无法满足他时,是舍弃还是应用这是无法确定的


总结

跟结构体相比,位段可以节约很大空间,但是会有跨平台的问题存在!!!

所以在使用的时候,我们要谨慎!!!

你可能感兴趣的:(c语言,c语言,c++,开发语言,数据结构)