我写了一个程序,必须用运算符>>读取一个大文件,计算一些东西并在多图中插入数据(字符串和整数)。 问题是程序崩溃,它似乎是一个内存问题(它适用于小文件)。 我认为它达到了Windows的内存分配限制。
我尝试了什么: 我制作了32位和64位版本。 如您所知,Windows的内存分配限制与32位和64位版本不同。 随着它崩溃。 我查看了任务管理器的性能选项卡,以观察内存消耗情况。 32位:程序每次达到5.3 GB时都会崩溃。 64位:程序的内存消耗不断增加,直到达到系统的整个RAM并崩溃。
我尝试使用地图而不是多图:程序执行时,程序永远不会崩溃并保持稳定在大约3.5 GB(32位和64位版本)。
那么,你知道地图和多图在内存使用或内存管理方面是否存在差异? 或者只是因为地图不允许重复键?
答案 0 :(得分:1)
当然有。你读过描述了吗?
std :: map是一个有序关联容器,包含带有唯一键的键值对。键使用比较函数Compare进行排序。
返回值: 1-2)返回一个由插入元素的迭代器(或阻止插入的元素)组成的对,以及表示插入是否发生的bool。
您不能拥有两个相同的密钥,因此您在同一个密钥下覆盖值,不会分配任何新的空间。
Multimap是一个关联容器,包含键值对的排序列表。
std::multimap::insert
不能"失败",它总是返回一个迭代器,因为它总是添加新的关联。因此,在循环中添加相同键下的项目将分配新内存。
对于每个多容器(set,unordered map,等)也是如此。它们在语义上是不同的。