Если вы позволите приведенной ниже программе работать неопределенно долго, она, в конечном итоге, израсходует всю оперативную память, и ОС начнет заменяться (потребовалось ~ 5 минут, чтобы занять 64 ГБ на моей рабочей станции).Если это правда, что здесь ответили: Когда на самом деле освобождается куча памяти? , тогда почему операционная система заменяется, а не восстанавливает неиспользованную оперативную память?
Как вы можете видетьв приведенном ниже коде большой вектор предположительно должен быть освобожден к концу каждого цикла (выходит из области видимости).Итак, я ожидал, что программа будет постоянно занимать одно и то же количество оперативной памяти.
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;
}