地图和多图:内存使用/管理差异?

时间:2015-03-24 09:54:18

标签: c++ memory dictionary multimap

我写了一个程序,必须用运算符>>读取一个大文件,计算一些东西并在多图中插入数据(字符串和整数)。 问题是程序崩溃,它似乎是一个内存问题(它适用于小文件)。 我认为它达到了Windows的内存分配限制。

我尝试了什么: 我制作了32位和64位版本。 如您所知,Windows的内存分配限制与32位和64位版本不同。 随着它崩溃。 我查看了任务管理器的性能选项卡,以观察内存消耗情况。 32位:程序每次达到5.3 GB时都会崩溃。 64位:程序的内存消耗不断增加,直到达到系统的整个RAM并崩溃。

我尝试使用地图而不是多图:程序执行时,程序永远不会崩溃并保持稳定在大约3.5 GB(32位和64位版本)。

那么,你知道地图和多图在内存使用或内存管理方面是否存在差异? 或者只是因为地图不允许重复键?

1 个答案:

答案 0 :(得分:1)

当然有。你读过描述了吗?

std::map

  

std :: map是一个有序关联容器,包含带有唯一键的键值对。键使用比较函数Compare进行排序。

std::map::insert

  

返回值:   1-2)返回一个由插入元素的迭代器(或阻止插入的元素)组成的对,以及表示插入是否发生的bool。

您不能拥有两个相同的密钥,因此您在同一个密钥下覆盖值,不会分配任何新的空间。

std::multimap

  

Multimap是一个关联容器,包含键值对的排序列表。

std::multimap::insert不能"失败",它总是返回一个迭代器,因为它总是添加新的关联。因此,在循环中添加相同键下的项目将分配新内存。

对于每个多容器(set,unordered map,)也是如此。它们在语义上是不同的。