すべてを正しく解放したかどうかを判断するために、関数を呼び出す前後に割り振られた合計メモリーを取得したいとします。CでのGetTotalMemory割り振り
私はこれをCでやっています。私は非常に錆びていますので、これが素朴な質問であれば私を許してください。私はC#GC.GetTotalMemory(真)と似たようなものを探していますが、これはWindows版です。
今、私は前にして関数を呼び出した後、PROCESS_MEMORY_COUNTERS_EX
とGetProcessMemoryInfo(...)
を使用していますが、私は、関数に入るとfree(...)
への呼び出しをコメントアウトした場合、それは私を与えるので、私は、出力の頭や尾をすることはできません同じ結果(後は常に大きい)。ここでは、このような結果に
GetProcessMemoryInfo(hProc, &before, sizeof(before));
r = c->function();
GetProcessMemoryInfo(hProc, &after, sizeof(after));
if(r->result != 0) {
printf("error: %s\r\n", c->name);
printf(" %s\r\n", r->message);
printf(" %s (%d)\r\n", r->file, r->line);
failed++;
}
else if(after.PrivateUsage > before.PrivateUsage) {
printf("memory leak: %s\r\n", c->name);
printf(" %d kb\r\n", after.PrivateUsage - before.PrivateUsage);
failed++;
}
else succeeded++;
...私が今持っているものです。
after.PrivateUsage - before.PrivateUsage = 12288
私が行くと私は同じ結果を得る解放するためにいくつかの呼び出しをコメントアウトした場合。 mallocを使用して割り当てたメモリの現在の合計サイズを実際にどのように決定できますか?
あなたはメモリリークを検出したり、パフォーマンス指標のいくつかの並べ替えのためのメモリ使用を追跡しようとしていますか? –
メモリリークが、今あなたがそれを述べるので...私は実際にちょうど私のコードのテストを書いていると私はすべてを解放していることを確認します。私はコードが気密であることを確認したい。 –
私はそれを使用していないが、私は、Visual Studioは、あなたが望むことのように聞こえるCRTデバッグヒープと呼ばれる機能を持っていますことをお読みください。http://msdn.microsoft.com/en-us/library/974tc9t1(v= vs.85).aspx独自のバージョンを作成するよりも既存の機能を使用するほうが堅牢になる可能性があります。しかし、私はWindowsでプログラムしていないので、これがあなたが望むものであれば確かに言えるでしょう。 –