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
是否将不需要Option
字段并将结构大小减小到16?
used
如果是这样,struct PoolItem {
entity_id: u32, // 4 bytes
component: Option<Position>, // 12 bytes ?
}
如何实现这种行为才能起作用?
我对Option
的测试似乎表明它无效。为什么?
Playground需要存储状态(Option<Position>
或Some
)某处
Playground example with tests的精确实现并不重要。显而易见的是,您无法在Option
的存储量中存储X
的数据量,并且也根本无法存储数据。 X
的一个明显实现是存储对象和一个布尔值,指示对象是否存在。显然正在发生类似的事情。 Option
是一种便利,它仍然必须将信息存储在某个位置。