推回有范围的std :: vector <std :: vector <double>>最终会耗尽所有内存

时间:2018-09-18 16:20:59

标签: c++ stdvector

如果无限期地运行下面的程序,它将最终用尽所有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;
}

0 个答案:

没有答案