C位域内存使用情况

Geo*_*nos 4 c struct bit-fields

我需要以下面的形式处理一些数据:

typedef struct{
    unsigned n1 : 12;
    unsigned n2 : 12;
    unsigned n3 : 12;
    unsigned n4 :  1;
    unsigned n5 : 35;
} data;
Run Code Online (Sandbox Code Playgroud)

我确保它们总共可以计算9个字节.
但他们没有..将该结构的9个字节写入文件并将其读回不会恢复所有数据,并sizeof(data)返回16.
这里的问题是什么?

Him*_*ury 8

问题是编译器出于效率原因添加了一些填充.

可以覆盖此行为.

有关如何使用gcc执行此操作,请参阅GCC中的强制对齐

有关如何使用visual c ++执行此操作,请参阅:在Visual C++中强制对齐