【问题标题】:Using Box<> with HashMap<> in Rust在 Rust 中使用 Box<> 和 HashMap<>
【发布时间】:2020-12-03 00:20:31
【问题描述】:

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


fn main() {
  let hashmap = Box<HashMap<u64, DataStruct>>;
  ...
}

fn main() {
  let hashmap = HashMap<u64, Box<DataStruct>>;
  ...
}

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

【问题讨论】:

    标签: rust hashmap


    【解决方案1】:

    HashMap 已经将其数据存储在堆上,您无需将值装箱。

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

    Source

    【讨论】:

    • 我从未在 Rust 文档中找到此信息。
    • @Giuseppe 文档似乎没有提到这一点,但 Rust Book 确实提到了这一点:“就像向量一样,哈希映射将它们的数据存储在堆上。” doc.rust-lang.org/book/…
    • 补充一点:根据经验,几乎所有动态的东西都将使用堆,因为堆栈必须在编译时知道。这意味着可以扩展的事物(Vecs 和 HashMaps,因为您可以添加元素),具有不确定的生命(Arcs 和 Rcs 分配,因为它们根据引用计数决定何时释放),或者具有未知大小(特征对象,递归结构)将在堆上分配,因为它们不能在编译时静态定义。
    • @RedBorg 但在递归结构和dyn Trait 的情况下,您必须明确使用Box,对吧?
    • 我认为是@IvanC​​pan>
    猜你喜欢
    • 2017-11-03
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2021-04-21
    • 2021-07-05
    • 2018-11-11
    • 2017-01-30
    相关资源
    最近更新 更多