< 返回版块

NjinN 发表于 2020-09-30 20:04

代码如下

    let mut buf = String::new();

    let mut m: HashMap<String, Arc<Mutex<String>>> = HashMap::new();

    for i in 0..1000000 {
        m.insert(i.to_string(), Arc::new(Mutex::new(i.to_string())));
    }

    io::stdin().read_line(&mut buf);

    for i in 0..1000000 {
        m.remove(&i.to_string());
    }

    io::stdin().read_line(&mut buf);

首先循环一百万次插入,此时内存占用大约200M

接着循环一百万次remove,结束时内存占用约70M

求问这大约几十M的内存为什么没有释放

新人小白,问题可能比较低级~~~

评论区

写评论
zhuxiujia 2020-10-02 15:58

哈希map 扩容了但是得一定条件下才会缩容的吧?

作者 NjinN 2020-09-30 20:54

谢谢,问题解决了

--
👇
Rynco Maekawa: 除非显式调用 shrink_to_fit() 等函数,否则容器不会自动缩小。可以类比一个 Vec<T>,如果它在大小为 n 个元素的时候重新申请了一块两倍大的内存,那么之后当元素减少到 n-1 个的时候他该不该把这块内存释放掉换成更小的内存呢?

Rynco Maekawa 2020-09-30 20:25

除非显式调用 shrink_to_fit() 等函数,否则容器不会自动缩小。可以类比一个 Vec<T>,如果它在大小为 n 个元素的时候重新申请了一块两倍大的内存,那么之后当元素减少到 n-1 个的时候他该不该把这块内存释放掉换成更小的内存呢?

1 共 3 条评论, 1 页