3位数组对齐

array alignment of 3 bits

我有一个包含 3 位字段的结构。

struct A {
  unsigned char a:3;
};

我想要一个 struct A 的数组,每个元素只占用 3 位而不是整个字节。

有办法吗?

不,这是不可能的。 a 占用 3 位,但 A 至少占用 sizeof(char)。

顺便说一句,这就是为什么您可以将位域作为结构成员,但不能将位变量作为函数局部变量。最小可寻址单元是一个字节。

最好的方法是在每个结构中存储 24 位,然后在每个结构中有 8 x 3 位的实体。您可以使用按位操作来访问以下结构中的每个 3 位实体:

struct A {
  unsigned char a[3];
};

然后你在创建数组等时就没有浪费 space。但是,你会浪费任何未使用的 3 位实体,最多 7 个 vs 可能的最小 0 个(无浪费)。