struct x
{
char a : 1; // statement 1
char c : 3; // statement 2
};
这个结构的大小是多少。陈述1和2的含义是什么?
答案 0 :(得分:10)
这些陈述声明位字段
这意味着a
占用1
位的内存,c
占用3
位的内存。
结构的大小为:
至少4位
+填充(位)
最有可能的是,8 bits
即1 byte
由于,
如果一系列位字段没有达到int的大小,则可以进行填充。填充量由结构成员的对齐特征决定。
什么是位字段?
的 From IBM documentation: 强>
C和C ++都允许将整数成员存储到小于编译器通常允许的内存空间中。这些节省空间的结构成员称为位字段,可以显式声明它们的宽度(以位为单位)。位字段用于必须强制数据结构与固定硬件表示相对应且不太可移植的程序中。
声明位字段的语法如下:
>> -type_specifier - + ------------ + - : - constant_expression - ; --->< '-declarator - '
位字段声明包含一个类型说明符,后跟一个可选的声明符,一个冒号,一个表示以位为单位的字段宽度的常量整数表达式,以及一个分号。位字段声明可能不使用任何类型限定符,const或volatile。