我有这种类型:
struct Foo(u32);
我使用Foo
的方式,我知道里面的u32
永远不会保留值u32::max_value()
(但u32
的所有其他值)。在我的应用程序中,我需要存储 Option<Foo>
的许多实例。因此,如果Option<Foo>
只占用32位内存而不是64 as Option<u32>
does,那将非常有用。
我知道Rust会对类似Option<&T>
的类型执行此优化,因为它知道&T
永远不会有零值。我还听说过一段时间以前合并的一些不错的内存布局优化。
我可以以某种方式告知编译器这种可能的内存布局优化吗?
如果在我的确切情况下无法做到这一点,那么是否可能,如果......
Foo
&#39; u32
永远不会是0
? (也许这是可能的,因为这更接近Option<&T>
案例?)Foo
&#39; s u32
只会使用31位? (也许我们至少可以告诉Rust有些未被使用?)