选项类型是否可以删除对布尔字段的需要?

问题描述 投票:0回答:1
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的测试似乎表明它无效。为什么?

struct rust boolean padding optional
1个回答
0
投票

Playground的精确实现并不重要。显而易见的是,您无法在Option的存储量中存储X的数据量,并且也根本无法存储数据。 X的一个明显实现是存储对象和一个布尔值,指示对象是否存在。显然正在发生类似的事情。 Option是一种便利,它仍然必须将信息存储在某个位置。

© www.soinside.com 2019 - 2024. All rights reserved.