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