结构体位段
来源:互联网 发布:业绩数据分析内容 编辑:程序博客网 时间:2024/05/17 00:08
每天进步一点点!
编译器会尽可能的避免储存空间的浪费,这个特性在结构体中显得尤为重要。
我们知道在结构体中为了提升效率和避免储存空间的浪费,在储存其成员时要进行内存对齐,但是除了这个做法之外,这里还有一个更加节省空间的做法,那就是 实现位段能力。
在c语言中允许我们定义的最小数据类型是占一个字节(8bit)的char,它可以表示2^8个数字,但是有时候我们只需要几个bit位就可以表示一个数据,比如我们要表示性别(两种)的话只需要一个bit位(两种状态),比如我们要表示一个占17个bit位的数据的话就没必要去给它分配32 个bit位,位段允许我们实现如上的功能,它的具体用法如下。
struct A{unsigned int sex : 1;unsigned int font : 17;unsigned int size : 2;}obj1;在成员名后面跟一个冒号和一个数字,数字表示它所占bit位的大小,比如上面sex占一个bit位,足以表示性别的两种状态,font占17个bit位,这样我们就不必为他开辟一个32个bit位大小的空间了,所以上面这个结构体占20个bit位,但是考虑到结构体对齐问题,实际上计算机给它分配了32个bit位(4字节)。
规则:
1、在遇到不同类型或非位段数据时将给它重新分配空间。
2、位段是结构体的一种能力,所以使用它时也符合结构体对齐规则。
注意:
1、当后面的位段较大,无法储存于前一个位段剩余的空间时,究竟是给它重新分配空间还是直接放在前一个位段的后面,这取决于你的机器。
2、位段中的数据是从右向左还是从左向右分配的也与机器有关。
3、位段的最大长度由编译器决定,大多数编译器把位段的最大长度限定在一个整型长度之内,所以一个能够运行与32位整数的机器上的位段不一定能在16位机器上运行。
4、注重可移植性的程序应该避免使用位段,因为位段使用的某些规则与机器和编译器密切相关,如果使用了,那么当程序在另一台机器上运行时可能会发生不可预料的错误。
成于坚持,败于止步!
1 0
- 结构体位段
- 结构体位段
- 共用体和结构体位段的使用
- 共用体和结构体位段的使用
- C语言结构体位段特性实现断言宏
- 结构体位对齐
- 结构体位域操作
- 结构体位域
- 结构体位制
- 结构体位制
- 结构体位制概念
- 结构体位域操作
- 结构体位域
- 结构体位域
- 结构体位域
- C 结构体位域
- 结构体位制
- 结构体位制
- PAT A1010
- java设计模式(六)
- TSQL(SQL Server)使用语句双游标循环多表操作
- 最佳裁判
- Linux系统管理——网络配置与管理
- 结构体位段
- 安徽大学大一高数第八章答案
- Linux压缩好帮手bzip2
- Latin's Martrix
- 这20个正则表达式,能让你少写1,000行代码
- 模拟滤波器和数字滤波器
- 关于GreenDao你应该知道的小技巧
- nodejs之——cookie和 session应用
- S4.4_Struts2_ActionAdvance action通配符的用法