【发布时间】:2015-07-31 18:00:10
【问题描述】:
我遇到了 C 中的结构打包问题。我希望此结构的大小为 4 个字节,所有字段都按此顺序排列,但最终被填充为 8 个字节。我猜这个问题正在发生,因为 dclInput 和 dclOutput 正在与 4 字节边界对齐。是否有可能告诉编译器不要对齐这些结构并相信我不会要求指向任何一个的指针?我曾尝试使用#pragma pack(1),但这并没有帮助。编辑:不幸的是,__attribute__((packed)) 也不起作用 - 大小仍然是 8 个字节。
struct _IL_OPCODE {
unsigned code : 16;
union {
struct {
unsigned usage : 5;
unsigned mode : 3;
unsigned : 1;
unsigned bias : 1;
unsigned invert : 1;
unsigned centered : 1;
unsigned : 4;
} dclInput;
struct {
unsigned id : 8;
unsigned type : 4;
unsigned : 3;
unsigned unnormalize : 1;
} dclResource;
};
};
【问题讨论】:
-
您使用的是哪个编译器?对于 GCC,它应该是
__attribute__ ((__packed__))