2011-11-06 83 views
6
struct x 
{ 
    char a : 1; // statement 1 
    char c : 3; // statement 2 
}; 

如果这个结构是什么尺寸。陈述1和陈述2的含义是什么?给定结构的大小

+5

它们不是语句,而是位域声明。 –

回答

10

那些声明声明位域
这意味着a占用内存1位和c占用3位的内存。

的结构的大小将是:
ATLEAST 4个比特 +填充(比特)

,最有可能的,这将是8 bits即:1 byte

因为,
如果一系列位字段不会加上int的大小,可以发生填充。填充量由结构构件的对齐特征决定。

什么是位域?
From IBM documentation:

C和C++允许整数成员要存储到存储空间小于所述编译器通常会允许。这些节省空间的结构成员称为位字段,它们的位宽可以显式声明。位字段用于必须强制数据结构对应于固定硬件表示并且不可移植的程序中。

用于声明一个比特字段是如下的语法:

>> - type_specifier - + ------------ + - : - constant_expression - ; - - > < “-declarator-”

的位字段声明包含一个类型说明符接着任选的声明符,冒号,恒定整数表达式,表示在比特字段宽度,和分号。位字段声明可能不使用任何类型限定符,const或volatile。