C结构的大小

时间:2011-08-18 09:44:22

标签: c

struct st1{
    int a:1; int b:3; int c:6; int d:3;
}s1;

struct st2{
    char a:3;
}s2;

int main(){
    printf("%d : %d",sizeof(s1),sizeof(s2));
    getchar();
}    

我的输出为2:1

请告诉我,这个程序是如何工作的,并且在这里使用:operator(a:1)。

谢谢

3 个答案:

答案 0 :(得分:4)

:定义了bit-field

在您的示例中,类型为struct st1的对象在编译器选择的某种排列中使用13位。

编译代码时选择的特定排列会产生占用2个字节的对象。 13位不一定是这些字节中的第一个(或最后一个)。

另一个结构类型(struct st2)占用(3位)1个字节。

答案 1 :(得分:1)

此处使用的:运算符指定其中包含的字段的中的大小。 sizeof()返回字节边界长度,因此对于第一个,13位(2个字节),以及第二个,1个字节。

答案 2 :(得分:0)

至少有两件事值得注意:

  1. 每个对象都必须是可寻址的,这意味着它至少会占用一个字符的大小。
  2. 实现可以自由添加填充以便在对齐或其他问题时使用。 Iow,包含两个整数的结构不能保证大小与sizeof(int)* 2相等。