我有持续运行的流程。它动态分配一些内存并增加堆大小。例如,分配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())在条件满足后没有释放内存。这个过程不能被杀死或停止。
答案 0 :(得分:2)
如果实际将内存释放到操作系统完全取决于您的环境/操作系统和malloc的底层实现。
例如,如果块很小并且可以重复使用,则无需释放内存。 但总的来说,你可以假设它会。
现在关于你的代码,我会重构它以使用:
vector <unique_ptr<Object>> objects;
并释放它并释放您可以调用的所有对象:
objects.clear();