我看到类似int kind : 19;
的字样。我不熟悉这种语法。有人能让我知道这是什么意思吗?谢谢。
struct _jit_type
{
unsigned int ref_count;
int kind : 19;
int abi : 8;
int is_fixed : 1;
int layout_flags : 4;
jit_nuint size;
jit_nuint alignment;
jit_type_t sub_type;
unsigned int num_components;
struct jit_component components[1];
};
http://git.savannah.gnu.org/cgit/libjit.git/tree/jit/jit-internal.h#n784
答案 0 :(得分:0)
int kind : 19;
平均19位用于记忆种类,是位字段
这可以减少内存(堆或堆栈)的消耗,例如,如果之前或之后的其他字段位于13位上,则它们都可以使用32位(取决于其他字段,对齐方式等)>
示例
struct S1 {
int kind : 19;
int value : 13;
};
struct S2 {
int kind ;
int value;
};
如果 int 使用32位,则sizeof(struct S2)
为8,而sizeof(struct S1)
为4
有局限性:
例如,您无法获得位字段的地址:
struct S1 s1;
int * p = &s1.kind;
产生编译器错误cannot take address of bit-field ‘kind’
,这是因为类型int:19
不存在,并且将字段 kind 的地址用作 int * 当然是没有道理的。
并作为EugeneSh。在一句话中说,您无法获得位域的 sizeof ,因为 sizeof 的统一性是char的大小( sizeof(char)为1(按定义)),所以
sizeof(s1.kind)
产生编译器错误‘sizeof’ applied to a bit-field