为什么当我的矢量<矢量<int><矢量> >大于 RAM 时,我的程序会产生正确的输出?
Why does my program produce correct output when my vector< vector< vector<int> > > is larger than the RAM?
我实现了一个系统,它将一些数据作为输入,并产生一个非常大的vector< vector< vector<int> > >
,然后我输出到一个文件。
计算结果后,我决定计算这个最终3d向量内的数字总数,它是:1386502951
意味着存储该向量所需的总内存量至少为1386502951*4 bytes = 5.16512599 GB
然而,我的RAM内存只有4gb。
谁能给我解释一下这是怎么可能的?提前感谢!
您的应用程序能够分配比计算机上物理安装的更多的内存,因为它支持虚拟内存。分配、分页和释放虚拟内存由操作系统处理,使应用程序可以运行而不必担心耗尽物理内存。
请记住,当应用程序从堆中释放内存时,可能不会立即释放分配的内存。这有一种倾向,使人们认为他们的应用程序有时使用了更多的内存。
有很多网站讨论虚拟和物理的话题,以及操作系统提供的任何API,允许你对它进行一些控制。一个快速的Google Dance应该会为你提供大量关于这个主题的链接。
之所以没有失败,可能有很多原因。
如注释中所述,最有可能的是windows将其中的一大块放在了虚拟内存(而不是RAM)中。
另一种选择(在某些情况下)是优化器正在清理您的列表(也许?)
查看正在发生的事情的最好方法是打开任务管理器,切换到性能选项卡,查看它使用的RAM监视器。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中