目录
什么是位段?
位段的声明和结构体成员类似,不过:
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.修改默认对齐数
我们可以通过修改默认对齐数的方式来尽可能实现成员的对齐数更小。
如有错误,欢迎指正!