C语言之自定义类型——结构体------位段

目录

什么是位段?

位段的大小和内存分配

结构体节省内存空间的方式

1.成员的先后声明

2.修改默认对齐数


什么是位段?

位段的声明和结构体成员类似,不过:

1.位段的成员必须是int、unsigned/signed  int、或char;

2.位段成员名后面要有:加数字。如 

struct S{
int a:3;
int b:5;
int c:7;
}s;

此时的s就是位段类型,那么s的大小是多少呢?

位段的大小和内存分配

我们不妨测试一手--》

 

位段的成员冒号后面的数字说明了该成员的空间大小为多少个bit,而位段开辟空间时是按int或者char类型大小开辟的,比如上面第一个s各成员相加是15bit,小于int(4bite==32bit),所以1个int大小足够了,大小就是4,但是如果是第二个多了20bit,那么1个int大小不够,所以要再开辟一个int大小的内存,所以是8。

注意:位段涉及很多不确定因素,不能跨平台,所以对于一个可移植程序来说要避免使用位段,但位段的使用可以节省内存空间,对于结构体我们不仅能用位段,还可以通过其它方式节省一部分空间。

结构体节省内存空间的方式

1.成员的先后声明

 

 上面可以看到同样的成员但空间不一样,这种方式能够节省空间。

2.修改默认对齐数

我们可以通过修改默认对齐数的方式来尽可能实现成员的对齐数更小。

 如有错误,欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值