私のプロセスの現在のメモリ使用量を得るために、(WIN32 APIを使用して)C++関数を実装したいと思います。メモリ使用量を確認する方法
この投稿How to determine CPU and memory consumption from inside a process?からコードをチェックし、その機能を実装しました。しかし
bool GetMemoryUsage(size_t& usageInBytes)
{
PROCESS_MEMORY_COUNTERS_EX pmc;
if (GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*) &pmc, sizeof(pmc)))
{
usageInBytes = pmc.WorkingSetSize;
return true;
}
else
{
return false;
}
}
、私はそのようにそれをテストしようとすると:それが失敗した
size_t initialMemoryUsage = 0;
GetMemoryUsage(initialMemoryUsage);
size_t use = 596;
void* memUsed = malloc(use);
size_t memoryUsage = 0;
GetMemoryUsage(memoryUsage);
assert(memoryUsage == initialMemoryUsage + 596);
free(memUsed);
GetMemoryUsage(memoryUsage);
assert(memoryUsage == initialMemoryUsage);
:、GetMemoryUsage
はpmc.WorkingSetSize
を使用しています
- 場合
memoryUsage
が12288によってinitialMemoryUsage
よりも大きく、解放メモリがありませんそれを減らさないでください GetMemoryUsage
がpmc.PrivateUsage
、memoryUsage
とinitialMemoryUsage
は、私はパス上記のテストを持って正確で信頼性の高い方法で、いくつかのメモリ
GetMemoryUsage
を割り当てられた後でも、全て等しいですか?
プロセスがメモリをどのように使用するかについてのあなたの期待は、単に間違っています。あなたが得た結果は正しいものであり、実際に何が起こっているかを示します。 –
OK、そういうわけで、あるメモリがいつ割り当てられたのかを知る方法はありますか?それとも単純に不可能なのでしょうか? – jpo38
「メモリ」と「割り当てられた」とは何を意味しているのかによって異なります。あなたは現在、いつメモリが割り当てられているか、どれくらい見ていますか?あなたが思うほどの記憶ではありません。 (物理?バーチャル、リザーブド、居住者、または何?)それはあなたの考え方に「配分」されていません。 (予約されていますか?有益なデータを含んでいますか?何ですか?)あなたがしようとしていることを正確に知らなければ、それを手助けするのは難しいです。あなたは何の質問に答えようとしていますか?できるだけ具体的にしてください。 –