64位结构实际上被填充为12个字节

64-bit structure is actually padded to 12 bytes

考虑下面的结构,其中位域大小的总和为 64 位。为什么 sizeof 说这个结构是 12 个字节,而它应该是 8 个字节?

typedef struct wl_Ls {
    unsigned int    total:17;
    unsigned int    used:17;
    unsigned int    entrySize:17;
    _Bool           point:1;
} wl_Ls;

[解决方案:] 对前 2 或 3 个成员使用 64 位类型修复修复它。解释在标记为 Solution

的答案中

位域并不总是保证紧密地打包在一起。允许编译器在位域之间插入填充的两种情况是:当两个连续的位域不是同一类型时,以及当位域不适合“分配单元”中仍然可用的位数时位域的类型。

假设 unsigned int 是 32 位,您的结构中的所有三对连续位域至少符合其中一种情况。