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 个(无浪费)。
我有一个包含 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 个(无浪费)。