映射和多映射:内存使用/管理差异

Map and multimap : memory usage / management differences?

本文关键字:映射 管理 内存      更新时间:2023-10-16

我写了一个程序,必须用运算符>>读取一个大文件,计算一些内容,并在多映射中插入数据(字符串和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不能"失败",它总是返回迭代器,因为它总是添加新的关联。因此,在循环中在同一个键下添加项目将分配新的内存。

每个多容器(集合、无序映射、)也是如此。它们在语义上不同。