位字段的内存位置

时间:2015-05-19 22:46:44

标签: c++ language-lawyer bit-fields

从2014年11月的C ++ 14标准工作草案开始:

  

§1.76

     

c ISO / IEC N4296 5 [示例:声明为

的结构
struct { 
    char a;
    int b:5, 
    c:11, 
    :0, 
    d:8; 
    struct {int ee:8;} e; 
} 
  

包含四个单独的   存储位置:字段a和位字段d和e.ee各自   单独的内存位置,可以在没有的情况下同时修改   相互干扰。位域b和c在一起   构成第四个记忆位置。位域b和c不能   同时修改,但b和a,例如,可以。 - 结束   例子]

我认为:0充当了排序的分隔符,这就是d具有单独的内存位置而bc没有的原因。但是,我不明白

的含义
  

一起构成第四个存储位置

bcunion吗?例如,相当于

union {
    int b:5;
    int c:11;
};

1 个答案:

答案 0 :(得分:1)

不,他们不会像在union示例中那样分享任何内容。

为了考虑记忆位置,它们只被视为一个单位。

换句话说,以下是您示例中的位(可能)

AAAAAAAA BBBBBCCCCCCCCCCC DDDDDDDD EEEEEEEE (ee sharing e)

这些空格用于显示内存位置,不占用内存中的任何空间。