访问地图元素会增加其分配的内存大小

时间:2011-10-11 22:07:47

标签: c++ memory-management map

我的代码中有一个名为map<vector<double>,double>的{​​{1}}元素。

我注意到我的代码的内存使用量趋于累积,直到我在我的机器上使用了整个可用内存(从~200 MB到~4GB)。注释掉我的代码中的东西我得出的结论是,访问此映射中的元素的行是一个注释掉的,阻止内存使用量增加的行。 我使用[]运算符访问该值,我认为这可能是因为double值与map中的值不完全相同。然后我搜索了一个可能是这样的情况:

EU

这里std::map<vector<double>,double>::iterator mit = EU.find(s); if (mit == EU.end()){ for (int i = 0; i < 3; i++){ O.w(s[i]); } cin.ignore(); } 是一个函数在I类我创建的用于在屏幕上显示内容/写入硬盘的内容。在这种情况下,它只是O.w(s[i])而我使用printf("%0.10f\n",s[i])只是为了停止程序,所以我可以检查输出。 这也会导致内存使用量的增加。 为什么会这样,我该如何防止这种情况?

感谢。

1 个答案:

答案 0 :(得分:3)

当您访问std::map中的元素时,如果索引没有关联值,则会创建一个新元素。因此,每次使用新密钥访问地图时,都会创建一个新节点,以保存新的std::vector< double >密钥和double值。