c++ - 访问 map 元素会增加其分配的内存大小

标签 c++ memory-management dictionary

我有一个 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/

相关文章:

c++ - 使用私有(private)的成员变量 c++

c++ - 无法使 opengl 纹理正常工作

c++就地初始化匿名数组

linux - Linux 中的直接内存访问

python - 用字典的值替换字符串

python - 试图在 DataFrame 的切片副本上设置一个值

c++ - 具有 unique_ptr 作为成员的 C++ 模板的构造函数失败

C数组内存分配

java - 如果 equals 方法返回 true,如何在内存中分配相同的空间?

python - 使用正则表达式分组将字符串转换为字典