代码之家  ›  专栏  ›  技术社区  ›  Glitch

当唯一的成员是位字段时,__attribute__((压缩))能否创建一个1位结构?

  •  4
  • Glitch  · 技术社区  · 1 年前

    我正在阅读GNU/GCC的文档,并停留在的描述 __attribute__ ((packed)) . 上面写着:

    拥挤的

    packed属性指定变量或结构字段应具有尽可能小的对齐—一个字节用于变量,一个位用于字段,除非使用对齐的属性指定更大的值。

    这里是一个结构,其中字段x被封装,因此它紧跟在a之后:

    struct foo
    {
        char a;
        int x[2] __attribute__ ((packed));
    };
    

    我想知道这个属性是如何工作的,以及这个代码是否:

    struct bar
    {
        char a:1 __attribute__ ((packed));
    };
    

    将创建1位结构而不是1字节。

    1 回复  |  直到 1 年前
        1
  •  5
  •   dbush    1 年前

    字节是最小的可寻址单元。因此,结构只能占用整数个字节,而不能占用小数字节。

    位字段中任何未使用的位(或者更准确地说,包含位字段的存储单元)都将变为填充。

    所以在你的例子中 struct bar ,结构体的大小仍然为1,其中使用了1位,未使用了7位。