unordered_map中插入时两种类型之间的差异

时间:2011-07-15 09:52:20

标签: c++ stl

首先,我使用make_pair在我的无序地图中插入键和值。 然后我通过pmap -x检查我的内存使用情况[pid]它是535100 Kb

现在我将插入更改为map [key] = value 现在内存使用量为535260(增加) 有人可以解释这两个插入的区别。这样我就能理解内存的使用情况。

3 个答案:

答案 0 :(得分:1)

map.insert(make_pair(key,value));

在地图中搜索带有此键的条目;如果没有,则插入具有给定值的新条目;不替换此密钥的现有值。

map[key] = value

在地图中搜索带有此键的条目;如果没有,则插入一个带有默认构造值的新条目;然后通过赋值将旧的(或新构造的)值替换为新值。

所以第二个版本可能会做更多的工作,如果值类型的默认构造函数可以暂时分配更多的内存。

答案 1 :(得分:1)

你无法说出原因。它取决于实现。您使用哪个STL编译器?如果可能的话,请查看来源。

我可以举例说明以下语句的内存消耗在VS2010上有所不同。但这是一个内部优化。(后者使用更少的内存)

shared_ptr<int> i(new int(11));
auto j = make_shared<int>(11));

答案 2 :(得分:0)

地图的内部内存管理从您身上抽象出来。你不应该关心它,你不应该关心它。

无论您的特定实施中发生什么内部结构都不必担心。

只需使用提供的API即可。如果您坚持调整以获得最佳使用,请进行配置。

可能性包括:

  • 预先分配空间块
  • 你在测试中犯了一个错误(可能很高兴看到你的测试用例,而不是仅仅听到你抱怨他们......)