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

accessing map elements increase it's allocated memory size

本文关键字:内存 分配 地图 元素 增加 访问      更新时间:2023-10-16

我有一个map<vector<double>,double>元素在我的代码命名为EU

我注意到我的代码的内存使用量趋于累积,直到我使用了机器上的全部可用内存(从~200 MB到~ 4GB)。在我的代码中注释掉一些东西,我得出的结论是,在这个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])是一个函数在I类中,我已经创建了显示屏幕上的东西/写入硬盘。在本例中,它只是printf("%0.10fn",s[i]),我使用cin.ignore()只是为了停止程序,以便检查输出。这也会导致内存使用量的增加。为什么会这样,我该如何预防呢?

谢谢。

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