我有以下内存布局(伪代码):
struct {
union {
fieldA : 45;
struct {
fieldB1 : 12;
fieldB2 : 33;
}
}
fieldC : 19;
}
Run Code Online (Sandbox Code Playgroud)
即,字段A的存储器有时可以用于其他目的(字段B1和B2)。我希望这个结构尽可能压缩,即大小为 64 位。
似乎无论我做什么(例如打包属性),联合总是在 fieldC 之前填充 3 位以获得 48 位(6 字节)(当然它也被填充)。
如何构造一个具有非常奇怪的位域排列的 C 结构/联合?
64 位大小。
使用 typedef 或带有单个uint64_t. 使用位域操作为每个字段编写 getter 和 setter。