我遇到了一个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 __))' –