私は、プロセスを継続的に実行しています。いくつかのメモリが動的に割り当てられ、ヒープサイズが増加します。たとえば、20 MBのヒープメモリが割り当てられます(/ proc/pid/smapsにチェックインされています)。いくつかの条件が真であると、動的に割り当てられたメモリをクリアし、空き/削除演算子を呼び出す必要がありますが、プロセスは(連続的に)実行されます。実行中のプロセスのヒープメモリを消去しています。C++
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())がメモリを解放していないことに疑いを持っています。プロセスを強制終了したり停止させることはできません。
は、メモリの非小チャンクを削除しましたシステムに戻ってください。プロセスを一時停止または強制終了する必要はありません。いずれにしても、C++のメモリ管理用のRAWポインタではなくRAIIを使用する必要があります。 – PSkocik