为什么这两个结构的大小不同?
#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页面仅显示所有struct成员都是相同类型时的示例,这是
WordA
的情况。谁能解释,为什么大小不匹配以及是否符合标准或实现定义?
最佳答案
在标准允许的意义上,可以。
它的不是,因为这是语言实现者(或更确切地说,是ABI的设计者)选择的。该决定可能是首选的,因为它可以使程序运行更快或使编译器更易于实现。
这是标准报价: