3位的阵列对齐

时间:2016-01-28 20:11:51

标签: c++ alignment bit-fields

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

struct A {
  unsigned char a:3;
};

我希望有一个struct A数组,每个元素只占3位而不是整个字节。

无论如何都要这样做?

2 个答案:

答案 0 :(得分:3)

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

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

然后,当您创建数组等时,您没有浪费的空间。但是,您将浪费任何未使用的3位实体,最多7个实体,最小可能为0(无浪费)。

答案 1 :(得分:1)

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

顺便说一句,这正是为什么你可以将位字段作为结构成员,但不能有位变量 - 比如说,函数局部变量。最小可寻址单位是一个字节。