我可以通过告诉编译器哪些值永远不会被“MyType”居住来创建size_of :: <option <mytype>&gt;()== size_of :: <mytype>()?

时间:2018-06-10 15:11:14

标签: rust memory-layout

我有这种类型:

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有些未被使用?)

0 个答案:

没有答案