【发布时间】:2020-07-17 11:09:57
【问题描述】:
use std::mem::size_of;
struct Position {
x: f32,
y: f32,
z: f32,
}
struct PoolItem {
entity_id: u32, // 4 bytes
used: bool, // 1 bytes + 3 (padding)
component: Position, // 12 bytes
}
assert_eq!(size_of::<u32>(), 4);
assert_eq!(size_of::<Position>(), 12);
assert_eq!(size_of::<PoolItem>(), 20);
如您所见,这样的结构有 20 个字节长。 Position 实际上是可选的,依赖于used。
使用Option 是否会消除对used 字段的需求并将结构大小减小到16?
struct PoolItem {
entity_id: u32, // 4 bytes
component: Option<Position>, // 12 bytes ?
}
如果是这样,Option 如何实现这样的行为?
我对@987654322@ 的测试似乎表明它不起作用。为什么?
【问题讨论】:
-
最初的问题是:“
Option类型可以消除对布尔字段的需要吗?”。编辑后的版本失去了恕我直言的提示。 -
丢失的“提示”是什么?如果我的编辑违反了问题的精神,您可以随时再次编辑问题;在我看来,这个问题的主要目的是询问使用
Option与使用bool相比是否会减小PoolItem的大小(答案是否定的)。无论如何,我的编辑是在前两个答案已经发布之后进行的,所以两个回答者都在回答您的原始问题,而不是我的编辑。
标签: struct rust boolean padding optional