在无序映射中插入两种类型的差异

Difference between two type on insertion in unordered map

本文关键字:类型 两种 插入 无序 映射      更新时间:2023-10-16

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

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

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

在map中搜索具有此键的表项;如果没有,则用给定的值插入一个新条目;不能替换此键的现有值。

map[key] = value

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

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

你说不出原因。它依赖于实现。哪个STL你使用哪个编译器?如果可能的话,看看资料。

我可以告诉你,例如,以下语句的内存消耗在VS2010上是不同的。但这是内部优化。(后者使用较少内存)

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

映射的内部内存管理是从您抽象出来的。你不必关心它,你也不应该关心它。

无论在你的特定实现中发生了什么,都不需要关心。

只使用提供的API。配置文件,如果你坚持调整为最佳使用。

可能性包括:

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