2014-06-25 52 views
0

我有大量的鍵/值對,說二千萬,到 插入到dense_hash_map。我注意到在插入過程中發生了重新分配 的幾次,並且內存分配的峯值比所需的值高出一倍。 爲了減少 重新分配的總次數並獲得更多效率,我是 考慮了預分配。谷歌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)。

我該怎麼做?

+0

使用'dense_hash_map (20000000)'來代替 –

+0

@RedAlert它是相同的意思。 – amanjiang

回答

0

dense_hash_map將自動縮小散列以適合數據量。爲了防止自動收縮,你必須設置min_load_factor