【发布时间】:2021-10-06 20:59:58
【问题描述】:
考虑下面的结构,其中位域大小的总和为 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;
[解决方案:] 使用 64 位类型修复前 2 或 3 个成员修复它。解释在标记为解决方案的答案中
【问题讨论】:
-
sizeof对该架构中的各个元素有何看法? -
如果将
point的_Bool更改为unsigned int,会发生什么情况? IIRC,相邻的位域需要有匹配的类型。 -
17+17 不适合
unsigned int。试试uint64_t。 -
我怀疑这是为每个成员设置单词地址的方式。请参阅以下内容进行讨论:catb.org/esr/structure-packing/#_bitfields
-
@Wispy:我认为这个想法是
uint64_t total:17; uint64_t used:17;等等。不需要逻辑运算。
标签: c memory struct sizeof bit-fields