这是一个
bitfield
成员。你的代码意味着
dumpable
在结构中正好占据1位。
位域用于将成员打包到位级别。当结构中有很多标志时,这可以大大减少所使用的内存大小。例如,如果我们定义一个结构,它有4个具有已知数字约束的成员
0 < a < 20
b in [0, 1]
0 < c < 8
0 < d < 100
然后该结构可以声明为
struct Foo {
unsigned a : 5; // 20 < 2^5 = 32
unsigned b : 1; //
unsigned c : 3; //
unsigned d : 7; // 100 < 2^7 = 128
};
然后是foo的比特
可以
安排得像
ddddddd c cc b aaaaa
--------- --------- --------- ----------
octet 1 octet 0
===========================================
uint32
而不是
struct Foo {
unsigned a;
unsigned b;
unsigned c;
unsigned d;
};
其中许多位由于值的范围而被浪费
# wasted space which is not used by the program
# v v
ddddddd ccc
------------------------------------ ------------------------------------
uint32 uint32
b aaaaa
------------------------------------ ------------------------------------
uint32 uint32
所以你可以通过把许多成员打包在一起来节省空间。
请注意,C标准没有指定位域是如何在“可寻址存储单元”中排列或打包的。此外,与直接成员访问相比,位域速度较慢。