问题描述
考虑下面的结构,其中位域大小的总和是 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 位类型修复程序修复它。解释在标记为解决方案的答案中
解决方法
位域并不总能保证紧密地打包在一起。允许编译器在位域之间插入填充的两种情况是:当两个连续位域的类型不同时,以及当位域不适合在“分配单元”中仍然可用的位数时位域的类型。
假设 unsigned int
是 32 位,那么您结构中的所有三对连续位域都至少符合其中一种情况。