声明结构体时,可使用位域
如(以下以x86为例):
[code lang="cpp"]
struct BitField
unsigned int a:8;
unsigned int b:4;
unsigned int c:4;
[/code]
sizeof(BitField)为4
[code lang="cpp"]
struct BitField
unsigned int a:4;
unsigned int :0;
unsigned int b:8;
[/code]
sizeof(BitField)为8
使用规则:
Bit Filed不能跨字节,也就是最大不可以超过8,也就是1Byte,超过时可编译,但只能用到1Byte
使用0位域来使用新的字节,在一个字节不够用时使用
在不使用pack时,偏移为整个结构体最大成员占用的字节数,整个结构体为最大成员占用字节的整数倍
位域操作在开发系统内核/驱动程序时尤其好用。如CR3寄存器等结构,可以直接使用C struct模拟。
没有评论:
发表评论