如果无限期地运行下面的程序,它将最终用尽所有RAM,并且操作系统开始交换(我的工作站花了大约5分钟的时间才能占用64GB)。如果是这样,When does the heap memory actually get released?的答案是正确的,那么为什么操作系统要交换而不是回收未使用的RAM?
正如您在下面的代码中看到的那样,大向量应该在每个循环结束时释放(超出范围)。因此,我希望程序始终都占用相同数量的RAM。
OBS:如果内存较少,可以将nIter
数字设置为较低的数字。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int nIter = 700000000;
while(true){
std::vector< std::vector<double> > data;
data.reserve(nIter);
std::vector<double> dataLine( 7, 0.0 );
for( int i = 0; i < nIter; ++i ){
data.push_back( std::vector<double>() );
data.back() = dataLine;
}
} //End of scope.
return 0;
}