为什么当我的矢量<矢量<int><矢量> >大于 RAM 时,我的程序会产生正确的输出?



我实现了一个系统,它将一些数据作为输入,并产生一个非常大的vector< vector< vector<int> > >,然后我输出到一个文件。

计算结果后,我决定计算这个最终3d向量内的数字总数,它是:1386502951

意味着存储该向量所需的总内存量至少为1386502951*4 bytes = 5.16512599 GB

然而,我的RAM内存只有4gb。

谁能给我解释一下这是怎么可能的?

提前感谢!

您的应用程序能够分配比计算机上物理安装的更多的内存,因为它支持虚拟内存。分配、分页和释放虚拟内存由操作系统处理,使应用程序可以运行而不必担心耗尽物理内存。

请记住,当应用程序从堆中释放内存时,可能不会立即释放分配的内存。这有一种倾向,使人们认为他们的应用程序有时使用了更多的内存。

有很多网站讨论虚拟和物理的话题,以及操作系统提供的任何API,允许你对它进行一些控制。一个快速的Google Dance应该会为你提供大量关于这个主题的链接。

之所以没有失败,可能有很多原因。

如注释中所述,最有可能的是windows将其中的一大块放在了虚拟内存(而不是RAM)中。

另一种选择(在某些情况下)是优化器正在清理您的列表(也许?)

查看正在发生的事情的最好方法是打开任务管理器,切换到性能选项卡,查看它使用的RAM监视器。

最新更新