我对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;
};
};
最佳答案
在某些编译器中这是可能的,但它不是可移植的C,所以您可能不应该依赖它。
例如,在gcc中,可以使用packed
type属性:
struct _IL_OPCODE {
unsigned code : 16;
union {
struct {
...
} __attribute__ ((packed))