タスクマネージャにバグがあったとは

id:otn:20060928 の [Win]タスクとプロセス で、

ところで、メモリ使用量が仮想メモリを上回っているプロセスがあるが、これはどういうことか。同じ仮想メモリページを、複数の実メモリフレームに割り当てている??そんな馬鹿な。

ということを書いたが、これの理由が判明した。バグです。職場の知人が見つけてくれた(感謝)。


SysInternalsのProcessExplorerというツール( http://www.microsoft.com/technet/sysinternals/ )がある。これで表示される数字と、タスクマネージャの数字を比べてみると、タスクマネージャの「仮想メモリサイズ」の欄に表示されているのは、「Virtual Bytes」じゃなくて「Private Bytes」だ。
これは何者か検索すると( http://technet.microsoft.com/ja-jp/library/aa997156.aspx )、

Private Bytes
このプロセスによって現在割り当てられているバイト数のうち、他のプロセスと共有できないバイト数を表示します。

ということで、メモリ使用量( Working Set )がこれより大きくても何の不思議もない。


テストしてないというか、誰もタスクマネージャなんてまじめに見てないのか?


なお、Private Bytesは、「他のプロセスと共有できない」メモリの大きさであって、実際に共有しているのかどうかはまた別の話のようだ(共有可能であっても共有相手がないなどで共有しているとは限らない)。