我对C中的结构打包有问题。我希望这个结构的大小是4字节,所有字段都是按这个顺序排列的,但最后被填充到8字节。我猜问题是因为dclInputdclOutput与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中,可以使用packedtype属性:

struct _IL_OPCODE {
    unsigned code : 16;
    union {
        struct {
  ...
    } __attribute__ ((packed))

10-04 21:55
查看更多