映射和多映射:内存使用/管理差异
Map and multimap : memory usage / management differences?
我写了一个程序,必须用运算符>>读取一个大文件,计算一些内容,并在多映射中插入数据(字符串和int)。问题是程序崩溃了,而且似乎是内存问题(它可以很好地处理小文件)。我认为它达到了Windows的内存分配限制。
我尝试过的:我制作了32位和64位版本。正如您所知,Windows的内存分配限制与32位和64位版本不同。两者都崩溃了。我查看了任务管理器的性能选项卡,以观察内存消耗情况。32位:程序每次达到5.3 GB时就会崩溃。64位:程序的内存消耗不断增加,直到达到系统的整个RAM并崩溃。
我尝试使用映射而不是多映射:程序在执行过程中从未崩溃,并保持稳定在大约3.5GB(32位和64位构建)。
那么,你知道映射和多映射在内存使用或内存管理方面是否有区别吗?还是仅仅因为地图不允许重复的钥匙?
当然有。你读过描述吗?
std::map
:
std::map是一个排序的关联容器,它包含具有唯一键的键值对。按键通过使用比较功能Compare进行排序。
std::map::insert
:
返回值:1-2)返回一对,该对由插入元素(或阻止插入的元素)的迭代器和表示插入是否发生的bool组成。
不能有两个相同的键,所以覆盖同一个键下的值,不会分配任何新空间。
std::multimap
:
Multimap是一个关联容器,包含键值对的排序列表。
std::multimap::insert
不能"失败",它总是返回迭代器,因为它总是添加新的关联。因此,在循环中在同一个键下添加项目将分配新的内存。
每个多容器(集合、无序映射、等)也是如此。它们在语义上不同。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 如何在 C# 中映射双 C 结构指针?
- 当vector是tje全局变量时,c++中vector的内存管理
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++映射分割错误(核心转储)
- 内联映射初始化的动态atexit析构函数崩溃
- 使用"std::unordereded_map"映射到"std::list"对象
- 如何从多映射中删除特定的重复项
- 在未初始化映射的情况下,将值插入到映射的映射中
- QT通过C++添加映射QML项目
- C++从 Java 角度设置和映射内存管理
- 通过读取文件创建映射<字符串,矢量>时如何管理内存<string>
- 映射和多映射:内存使用/管理差异
- Boost管理的映射文件:在OSX和Linux之间不兼容
- 哪个容器是管理映射到其他一些小对象的小对象的合适容器
- C++ 标准::映射内存管理