看到网上例如: Ideone example为什么在这里打包结构5而不是4字节的大小?
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位。
可能重复[C中的结构和联合,确定大小和访问成员](http://stackoverflow.com/questions/3380118/structures-and-unions-in-c -determining-size-and-access-members) – 2015-04-01 07:19:41
@DavidTitarenco:我不认为这个帖子对位域有好处。如果这个问题已经在其他地方得到了回答,那么我不会感到惊讶。 – 2015-04-01 07:22:17
响应者应该注意,OP使用[非标准'__attribute__((packed))'](https://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html)GCC扩展来避免填充。所以,说编译器被允许插入填充是不正确的 - 当使用'__attribute __((packed))'时,GCC将组织结构以避免填充(在不支持未对齐的读取的平台上使访问更加昂贵)。 – user4815162342 2015-04-01 07:31:27