C++ google稠密散列映射调整为预分配不起作用

C++ google稠密散列映射调整为预分配不起作用,c++,memory-management,hashmap,C++,Memory Management,Hashmap,我有大量的键/值对,比如说两千万对 插入密集散列映射。我注意到有好几次 在插入过程中会发生重新分配,峰值 内存分配的值是所需值的两倍。为了减少 重新分配和提高效率的总次数,我很高兴 考虑预分配 于是我写道: dense_hash_map<k, v> m; m.resize(20000000); m.set_empty_key(0); m.set_deleted_key(-1); 为了进行预分配,在设置完空键后,我看到了一个大的 内存中分配了700MB,到目前为止还不错 但是,在最初

我有大量的键/值对,比如说两千万对 插入密集散列映射。我注意到有好几次 在插入过程中会发生重新分配,峰值 内存分配的值是所需值的两倍。为了减少 重新分配和提高效率的总次数,我很高兴 考虑预分配

于是我写道:

dense_hash_map<k, v> m;
m.resize(20000000);
m.set_empty_key(0);
m.set_deleted_key(-1);
为了进行预分配,在设置完空键后,我看到了一个大的 内存中分配了700MB,到目前为止还不错

但是,在最初几天的4到5次插入/擦除调用之后,大内存 块将被释放,密集散列映射将重复重新分配 直到1.2G字节,峰值才为2.3GB


我该怎么办?

密集散列映射将自动缩小散列以适应数据量。为了防止自动收缩,您必须设置最小加载系数

使用稠密散列映射20000000进行构造instead@RedAlert这是同样的意思。