谈一谈位段

什么是位段

位段是通过结构体来实现的一种以位(bit位)为单位的数据存储结构,它可以把数据以位的形式紧凑的储存,并允许程序员对此结构的位进行操作。由此可以看出,位段是一种节省空间的用法。位段的声明与结构体类似,但有两点不同:

位段的成员必须是整型家族的成员(char、int、unsigned int、signed int……)
位段的成员后面有一个冒号和一个数字

位段是怎么分配内存的

一般情况下位段的成员是同一类型的,不会夹杂不同类型的成员
因为位段本身就是一个非常不稳定的东西,如果成员类型不同的话,就会使得位段变得非常复杂充满了不确定性。
位段的空间是按照需要,以一次4个字节(成员为int)或1个字节(成员为char)的方式来开辟的。
位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序因该尽量避免使用位段。

当开辟出来的空间不够位段使用的时候,那个剩余的空间会被浪费掉,然后新开辟一个空间重新存放数据

struct S
{
	 char a:3;
	 char b:4;
	 char c:5;
	 char d:4;
};

所以位段S的大小为3字节

位段作及其缺点用

其主要作用就是能够将内存按位使用,提高内存的利用率,节省空间,我们网络协议中的报头就采用位段。
缺点:
主要是其不能跨平台的问题

int型位段成员会被当成有符号数还是无符号数是不确定的
位段中最大位数目是不确定的(在16位机器上int型最大为16,而在32为机器上int型最大为32,如若写成27,那么16位机器就会出问题)
位段的成员在内存中到底是从左向右分配,还是从右向左分配尚未定义
当一个结构体包含两个位段,第二个位段比较大,无法容纳于第一个位段剩余的位时, 是舍弃剩余的位还是利用,是不确定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的1++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值