【发布时间】:2015-06-05 18:07:53
【问题描述】:
查看在线示例: Ideone example
struct {
union {
struct {
uint32_t messageID : 26;
uint8_t priority : 3;
} __attribute__ ((packed));
uint32_t rawID : 29;
} __attribute__ ((packed));
uint8_t canFlags : 3;
} __attribute__ ((packed)) idSpecial;
为什么编译器会将结构体的大小报告为 5 个字节而不是 4 个字节?它应该包含 32 位。
【问题讨论】:
-
@DavidTitarenco:我不认为那个特定的帖子对位域有好处。如果这个问题已经在其他地方得到回答,我不会感到惊讶。
-
响应者应该注意OP使用non-standard
__attribute__((packed))GCC扩展来避免填充。因此,说允许编译器插入填充是不正确的——当使用__attribute__((packed))时,GCC 将组织结构以避免填充(在不支持未对齐读取的平台上使访问成本更高)。 -
简答:结构和联合必须是一个字节的倍数,甚至是匿名的。
标签: c++ c gcc struct bit-fields