google dense_hash_map调整大小以进行预分配不起作用

时间:2014-06-25 17:48:26

标签: c++ memory-management hashmap

我有大量的键/值对,比如说二千万 插入dense_hash_map。我注意到有几次 重新分配的过程发生在插入和峰值过程中 内存分配值是所需的两倍。 为了减少 重新分配的总次数和获得更高的效率,我 考虑预分配。

所以我写道:

dense_hash_map<k, v> m;
m.resize(20000000);
m.set_empty_key(0);
m.set_deleted_key(-1);

进行预分配,在set_empty_key之后,我看到了一个大的 在内存中分配700MBytes,到目前为止还不错。

但是,在前几次(比如4到5次)插入/擦除调用之后,大内存 块将被释放,并且dense_hash_map重复重新分配 直到1.2GBytes(峰值为2.3GBytes)。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

dense_hash_map会自动缩小哈希以适应数据量。要防止自动收缩,您必须设置min_load_factor