プロが教える店舗&オフィスのセキュリティ対策術

Windowsにてメモリ使用量を計測しています。
タスクマネージャのパフォーマンスタブにあるコミットチャージの合計値と
プロセスタブに示されるメモリ使用量を合計した値が
若干ずれているのですが、その差が不明です。
その理由を教えてください。

A 回答 (3件)

パフォーマンスタブの「コミットチャージの合計」とプロセスタブの「メモリ使用量」は全く別の種類の値なので、合計値は通常は一致しません。



「コミットチャージの合計」は、各プロセスに割り当てられている仮想メモリの量の合計です。この中にはOSが自動的に割り当てたものと、プロセスがOSに割り当て要求を出して認められたものがあります。また書き込みができる領域と、書き込みができない領域があります。

「メモリ使用量」はプロセスに割り当てられている物理メモリの量です。プロセスに割り当てられた物理メモリの量は、物理メモリの残りが逼迫してくると自動的に減らされます。その場合でも仮想メモリの割当量は変わらないので「コミットチャージの合計」は変わりません。

なお、プロセス間で同一の物理メモリ領域を共有することがあり、それぞれのプロセスの「メモリ使用量」でこの共有領域がカウントされるため、「メモリ使用量」の合計は実際に使用している物理メモリの量を超える場合があります。

物理メモリが充分に存在していてプロセスの「メモリ使用量」を減らす処理が必要なく、なおかつ実行しているプログラムの全体がメモリ上に乗っていることが期待される(プログラムが小さいか、大きいプログラムのコード全体がまんべんなく使用されている)ような特別な場合には、仮想メモリのコミットページがすべて物理メモリ上に存在する可能性が高いため、「メモリ使用量」の合計と「コミットチャージの合計」は近い値になるはずです。

なお、このあたりの情報は書籍「Inside Microsoft Windows 2000」に詳しい記述があります。参考まで。

この回答への補足

有難うございます。
更に質問なのですが、今PSAPIを使用してワーキングセットの値も参照しているのですが、それも「メモリ使用量」とは大きく異なるのです。
ワーキングセットは、各プロセスの物理メモリ使用量と思っているのですが、また違うものなのでしょうか?

Windowsのメモリ管理は奥が深い・・・・

補足日時:2005/06/23 08:49
    • good
    • 0

回答遅くなりました。



PSAPIを使ってプロセスごとのワーキングセットを表示するプログラムを作ってみましたが、タスクマネージャが表示する「メモリ使用量」にかなり近い(±4KB以内の)値が表示されました。

メモリに相当の余裕があってもワーキングセットの値はかなりダイナミックに変わりますから、PSAPIで取得した直後に比較しないと、すぐに違う値になってしまいます。値が違っていたのはそのせいではないでしょうか。
    • good
    • 0

 タスクマネージャのプロセスタブに表示されないプロセスも存在する。


 さらに、コミットチャージは「全プロセスがOSに要求してOSが承諾した総メモリ量」であり、「全プロセスが使用している総メモリ量」ではない。

 その辺の差ではないかな。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!