在浏览QEMU的源代码包时,我在exec.c文件中找到了:
struct PhysPageEntry {
/* How many bits skip to next level (in units of L2_SIZE). 0 for a leaf. */
uint32_t skip : 6;
/* index into phys_sections (!skip) or phys_map_nodes (skip) */
uint32_t ptr : 26;
};
我想知道:运营商意味着什么。我在C语法定义列表中找不到它。
答案 0 :(得分:8)
这是一个用位字段声明的结构,结构成员称为位字段: A
位字段使用结构声明进行设置,该结构声明标记每个字段并确定其宽度。上述定义使PhysPageEntry
分别包含一个6位字段和一个26
位字段成员,即skip
和ptr
。它的签名是
struct
{
type [member_name] : width ;
};
这里 width 是位字段中的位数。 宽度必须小于或等于指定类型的位宽。
答案 1 :(得分:2)
struct PhysPageEntry
声明两个bit fields skip
和ptr
。这基本上是允许结构有效地打包这些奇数长度(以位为单位)。如果作者没有这样做,结构可能是8字节长(在32位架构上)。
答案 2 :(得分:1)
表示位数。它主要用于工会:
struct byte {
unsigned a : 1;
unsigned b : 1;
unsigned c : 1;
unsigned d : 1;
unsigned e : 1;
unsigned f : 1;
unsigned g : 1;
unsigned h : 1;
};
您也可以阅读this以便更好地理解。
答案 3 :(得分:1)
它叫做bitfield。在结构或联盟内 声明,这声明'skip'是6位宽的“位字段”。它们将被用于结构内部。如果有帮助请投票正确!