最終更新 2003 10/15
サンプルのダウンロード → API_GlobalMemoryStatus.lzh(46k)
全ソースコード
GlobalMemoryStatus 関数
対応しているバージョン
95, 98, Me, NT3.1以降, 2000, XP, CE
使用するヘッダとライブラリ
winbase.h
kernel32.lib
|
メモリの使用量を調べるには GlobalMemoryStatus() 関数を使います。
引数に MEMORYSTATUS 構造体の変数のポインタを渡すと、メモリの状態が
格納されて戻ってきます。
サンプルのように、引数に渡す前に dwLength メンバだけを指定しておきます。
dwLength に指定する値は sizeof( MEMORYSTATUS ) です。
MEMORYSTATUS 構造体のサイズを sizeof で調べて指定しているだけですね。
MEMORYSTATUS 構造体にはなにやら色々なメンバ変数があるのですが、たんに
パソコンに内臓されているメモリの状態だけ調べたいなら
dwMemoryLoad
dwTotalPhys
dwAvailsPhys
の3つのメンバ変数の値を調べれば分かります。
dwMemoryLoad は、メモリを何%使用しているかの値が格納されています。
メモリの使用率ってトコです。
%の値ですから、0〜100までの範囲の数値です。
どれだけメモリを使ってるかを知りたいなら、この値を調べるだけで十分だと
思います。
dwTotalPhys は、パソコンにインストールされているメモリの全容量です。
サンプルではM(メガ)バイト単位で表示しているので、この値を 1048576.0
で割っています。
1Mバイト=1048576バイトです。
dwAvailPhys は、メモリの残量です。
これが0になったら、メモリが全部使用されているという事になります。
メモリがどれだけ使用されているかを調べたい時は
dwTotalPhys - dwAvailPhys
とやれば分かります。
【追加】03/02/20
仮想メモリは、パソコンのメモリ+ハードディスクのメモリのことで
ウィンドウズ上の全てのアプリケーションは、この仮想メモリを使用して
動いています。
ですから、プログラムでいじっているメモリのアドレスは、バーチャルな
ものなので、プログラム中で取得したアドレスが、必ずしもマシンのメモリの
アドレスと同じにはならないという事になります。
仮想メモリの容量はマシンのスペックで大きく変わります。
仮想メモリの容量はウィンドウズの設定で変更することもできますが
マシンのスペックにあわせてウィンドウズが勝手に設定します。
自分が使っているメインメモリ512M、HDD60Gのマシンでは
仮想メモリは約2Gに設定されています。
ウィンドウズはこの仮想メモリにあるデータを、実際のマシンのメモリ
(物理メモリ)に配置します。
物理メモリの残量が減ってくると、ウィンドウズが使用していないメモリの
データをハードディスクの方へ保存します。
そうやって、ウィンドウズはあたかも1つのアプリケーションに対して
2Gものメモリを使用できるように見せかけているようです。
アプリケーションで大きなデータを扱う時や、たくさんのアプリケーションを
開いて作業している時などに、ハードディスクがしきりに動いているのは
ウィンドウズが仮想メモリを使っているからです。
サンプルで表示している仮想メモリはサンプルプログラムに割り当てられた
ものなので、物理メモリがどんなに増えても、この仮想メモリの数値は
ほとんど変化しないと思います。
ページファイルについてはよく分かりませんが、多分、仮想メモリの中で
ハードディスクへ保存されているデータの容量だと思います。
物理メモリの残量が減ってくると、ページファイルの容量が増えると思います。
|