【发布时间】:2020-12-07 11:04:52
【问题描述】:
为什么这两个结构的大小不同?
#pragma pack(push, 1)
struct WordA
{
uint32_t address : 8;
uint32_t data : 20;
uint32_t sign : 1;
uint32_t stateMatrix : 2;
uint32_t parity : 1;
};
struct WordB
{
uint8_t address;
uint32_t data : 20;
uint8_t sign : 1;
uint8_t stateMatrix : 2;
uint8_t parity : 1;
};
#pragma pack(pop)
不知何故,WordB 占用 6 个字节而不是 4 个字节,而 WordA 恰好占用 32 位。
我假设给定结构内已使用位的总和将使两个结构具有相同的大小。显然我错了,但我找不到原因。
Bit fields 页面仅显示所有结构成员都属于同一类型的示例,这是WordA 的情况。
谁能解释一下,为什么尺寸不匹配,是否符合标准或实现定义?
【问题讨论】:
-
位域是特定于实现的,但通常,位域不会在不同的底层类型之间拆分。
-
@Jarod42
bitfield doesn't split between different underlying types.我想这可能是原因,但我想参考一下标准。 -
@Jarod42 我已将问题重命名为具体。
-
编译器应该如何看到它允许加入
address这不是与其余位域的位域?
标签: c++ bit-fields