清除运行进程的堆内存c ++

时间:2016-07-14 00:37:11

标签: c++ linux heap-memory

我有持续运行的流程。它动态分配一些内存并增加堆大小。例如,分配20 MB堆内存(在/ proc / pid / smaps中检入)。在某些条件为真之后,需要清除动态分配的内存并调用free / delete运算符,但该进程仍在运行(连续)。

class Object 
{
   vector <Object1> OB1;
   vector <Object2> OB2;
   //etc
 }

class Object1 {
  vector<string> temp2;
  vector<string> temp1;
  //etc 
}
//similar for Object2


std::vector <Object *> List;

Object* temp;
temp = new Object;

//Work with Object and its members (also vectors inside) (so object Size increases accordingly as vector size increases.

//insert into vector  
List.push_back(temp);

//Now clear function  
freeFunc()
  int i;
  int size = List.size();
  if (size == 0)
     return;

  for (i = 0; i < size; i ++)
  {
     delete List[i];
      List[i] = NULL;
  }
  List.clear();
  vector <Object *>().swap(List); //swap with empty vector
}

是否会为此正在运行的进程清除堆内存?或者只有在停止进程的情况下它才会被释放? 我怀疑代码(freeFunc())在条件满足后没有释放内存。这个过程不能被杀死或停止。

1 个答案:

答案 0 :(得分:2)

如果实际将内存释放到操作系统完全取决于您的环境/操作系统和malloc的底层实现。

例如,如果块很小并且可以重复使用,则无需释放内存。 但总的来说,你可以假设它会。

现在关于你的代码,我会重构它以使用:

vector <unique_ptr<Object>> objects;

并释放它并释放您可以调用的所有对象:

objects.clear();