脳梗塞には負けられない!

2008年12月26日に脳梗塞を発症。負けずに自転車と写真とBAND活動に熱中しているY.MATのブログ。

Windows メモリ管理の不思議

2006-05-23 12:28:43 | IT技術的なこと
Windows上でシステム開発を行っていると「メモリの食いすぎ?」なんて話が出てくる。

そんな関係で調べていたらおもしろい事を発見した。

タスクマネージャでメモリ使用量をチェックすることになるが、見ていると不思議な現象が起こる。

最初にアプリケーションを起動して最初の画面が出たときのメモリ使用量は 約16M となっている。
しかし、そのアプリを最小化すると、なんと、744KB にまで極端に減った。
もう一度通常サイズに戻すと、約3M のメモリ使用量となった。

アプリを最小化するだけでメモリの開放が起こったようだ。

ほんまに?

別のテストをやってみた。
C++ で 約400M のメモリを確保するプログラムを作って動かしててみた。





メモリ使用量(KB)
起動直後
最小化
元に戻す
400M確保
最小化
元に戻す
メモリ開放
最小化
元に戻す
2,944
16,636
748K
3,072
64,608
1,064
3,344
4,328
684
2,944


赤字にしている部分が不思議。
400M 確保しているのに 64M しか増えていない。

あれれ?

もう一度動かしてみた。
今度は仮想メモリサイズも確認した。






メモリ使用量(KB) 仮想メモリKB)
起動直後
最小化
元に戻す
400M確保
最小化
元に戻す
メモリ開放
最小化
元に戻す
2,944
16,636
748K
3,072
64,608
1,064
3,344
4,328
684
2,944
9,928
9,940
10,004
401,016
401,016
401,016

10,016
10,016
10,016


仮想メモリのところに 400M を確保している。
なるほど、つまり、Windows200/XP はメモリ管理で実メモリと仮想メモリを一つのプロセスでも使い分けているということ。
そういえば、「メモリ使用量=ワーキングセット」とWindowsヘルプには書いてある。
つまり、その時点で使ってる実メモリ内の使用量だけが表示されている。
「仮想メモリサイズ=アドレス空間の総量」とあるから、いわゆる「本当に使ってるメモリ量」は「仮想メモリサイズ」ということだ。

タスクマネージャで、プロセス単位のメモリ使用量の合計と、仮想メモリサイズの合計を出してみたところ、「仮想メモリサイズ合計+カーネルメモリ」が、タスクマネージャのパフォーマンス・タグに出てくる「メモリ使用量」に近いことが分かった。

それにしても、GC(ガベージコレクション)を調べても、実際のメモリの開放タイミングが読み取ることが出来なかったが、意外なところで開放されるのが発見できた。

やっぱり、タスクマネージャのデフォルト表示が、プロセス単位の「メモリ使用量」だけになってるんで勘違いしがちなんだと思う。
「仮想メモリサイズ」もデフォルトに入れてほしいものだ。


最新の画像もっと見る

コメントを投稿