在无序映射中插入两种类型的差异
Difference between two type on insertion in unordered map
首先,我使用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。配置文件,如果你坚持调整为最佳使用。
可能性包括:
- 预分配空间块
- 你在测试中犯了一个错误(可能很高兴看到你的测试用例,而不仅仅是听到你抱怨他们…)
相关文章:
- 如何使映射键具有两种不同的数据类型?
- 如何构造可以调用和返回两种不同类型的模板
- std::cin 从控制台获取两种不同的变量类型,'storing'以后使用第二种类型?
- C++ 一个函数,可以根据接受的值返回两种类型之一
- C++指针中的这两种类型的值分配有什么区别?
- 有没有办法让C++函数采用具有相同成员的两种不同类型?
- C++两种类型相互依赖
- 生成一个类Name_class并将两种数据类型存储在一个向量中
- 两种类型的构造函数重载
- 没有使用两种类型的字符串进行匹配的函数调用
- 声明具有两种类型的变量:"int char"
- 使用 Arduino 发送两种不同类型的传感器数据
- 键入来自不同第三方库的两种类型,无需联合
- 给定这两种类型,我是否可以确定虚拟函数是否已被覆盖?
- 如何使用指针连接两种不同的节点类型(结构)?
- 如何获得将两种不同类型的相乘的结果类型?
- 尝试连接两种不同类型的结构来创建链表
- 声明"t"中的两种或多种数据类型
- 如何获得C - 模板状行为,但仅允许实例化两种特定类型
- 为什么 c++ 编译器在对两种不同类型的数值变量使用"std::max()"函数时会出现错误