我有一个 map<vector<double>,double>
我的代码中的元素名为 EU
.
我注意到我的代码使用的内存会逐渐累积,直到我用完机器上的所有可用内存(从 ~200 MB 到 ~ 4GB)。注释掉我代码中的内容我得出的结论是,访问此映射中的元素的行是注释掉的那一行,可防止内存使用量增加。 我使用 []operator 访问该值,我认为这可能是因为 double 值与 map 中的值不完全相同。然后我搜索了一个可能是这样的案例:
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();
}
在这里O.w(s[i])
是我在类里面创建的一个函数,用于在屏幕上显示内容/写入硬盘。在这种情况下,它只是 printf("%0.10f\n",s[i])
我用cin.ignore()
只是为了停止程序,所以我可以检查输出。
这也会导致内存使用量增加。
为什么会这样,我该如何预防?
谢谢。
最佳答案
当您访问 std::map
中的元素时,如果索引没有关联值,则创建一个新元素。因此,每次您使用新 key 访问 map 时,都会创建一个新节点来保存新的 std::vector< double >
。键和 double
值(value)。
关于c++ - 访问 map 元素会增加其分配的内存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7733113/