すべてを正しく解放したかどうかを判断するために、関数を呼び出す前後に割り当てられた合計メモリを取得したいと考えています。
私は C でこれを行っていますが、非常にさびているので、これが素朴な質問である場合はご容赦ください。C# GC.GetTotalMemory(true) に似たものを探していますが、これは今のところ Windows にあります。
現在、関数を呼び出す前後に and を使用し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
free へのいくつかの呼び出しをコメントアウトすると、同じ結果が得られます。malloc を使用して割り当てたメモリの現在の合計サイズを実際に確認するにはどうすればよいですか?