代码如下
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的内存为什么没有释放
新人小白,问题可能比较低级~~~
1
共 3 条评论, 1 页
评论区
写评论哈希map 扩容了但是得一定条件下才会缩容的吧?
谢谢,问题解决了
--
👇
Rynco Maekawa: 除非显式调用
shrink_to_fit()
等函数,否则容器不会自动缩小。可以类比一个Vec<T>
,如果它在大小为 n 个元素的时候重新申请了一块两倍大的内存,那么之后当元素减少到 n-1 个的时候他该不该把这块内存释放掉换成更小的内存呢?除非显式调用
shrink_to_fit()
等函数,否则容器不会自动缩小。可以类比一个Vec<T>
,如果它在大小为 n 个元素的时候重新申请了一块两倍大的内存,那么之后当元素减少到 n-1 个的时候他该不该把这块内存释放掉换成更小的内存呢?