在 Rust 中使用 Box<> 和 HashMap<>

Giu*_*ppe 0 hashmap rust

我需要HashMap在 Rust 中创建一个 large ,这就是为什么我想到使用Box来使用堆内存。
我的问题是关于保留这些数据的最佳方式是什么,当然我只想到了两种可能的方式(预计我对 Rust 没有那么丰富的经验)。


fn main() {
  let hashmap = Box<HashMap<u64, DataStruct>>;
  ...
}
Run Code Online (Sandbox Code Playgroud)

或者

fn main() {
  let hashmap = HashMap<u64, Box<DataStruct>>;
  ...
}
Run Code Online (Sandbox Code Playgroud)

处理这种事情的最佳方法是什么?
非常感谢。

Iva*_*n C 5

HashMap 已经将它的数据存储在堆上,您不需要装箱您的值。

就像向量一样,哈希映射将它们的数据存储在堆上。此 HashMap 具有 String 类型的键和 i32 类型的值。像向量一样,哈希映射是同构的:所有的键必须具有相同的类型,并且所有的值必须具有相同的类型。

来源

  • 只是补充一下:根据经验,几乎任何“动态”的东西都会使用堆,因为必须在编译时知道堆栈。这意味着可以扩展的东西(Vecs和HashMap,因为你可以添加元素),具有不确定的生命周期(Arcs和Rcs分配,因为它们根据引用计数决定何时释放),或者具有未知的大小(特征对象、递归结构)将在堆上分配,因为它们不能在编译时静态定义。 (7认同)
  • @RedBorg,但在递归结构和“dyn Trait”的情况下,您必须显式使用“Box”,对吗? (4认同)