首先,我使用make_pair在我的无序地图中插入键和值。 然后我通过pmap -x检查我的内存使用情况[pid]它是535100 Kb
现在我将插入更改为map [key] = value 现在内存使用量为535260(增加) 有人可以解释这两个插入的区别。这样我就能理解内存的使用情况。
答案 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即可。如果您坚持调整以获得最佳使用,请进行配置。
可能性包括: