访问地图元素会增加其分配的内存大小
accessing map elements increase it's allocated memory size
我有一个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
值。
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配