Windowsのメモリ管理について
昔手習いのころはプログラミングさせてもらえなかった。
そのころはテスターで、「ああ、(仕事で)プログラミングしてぇ」
と思っていたもの。
ある人の独り言で「物理メモリが極限に少なくなった状態でこの
ツールをテストしてほしい。」といっていた。
早速、昼飯の時間*1にメモリをダミーで確保するプログラムを作ったが
ちっともうまくいかない。
mallocしとけばいいんでしょ。とか簡単に思っていたが、そうはいかない。
わかったことは、
- Windows9x系は、メモリを確保するとすぐに物理メモリに割り当ててくれる。
- WindowsNT系は実際に使うまでメモリを割り当ててくれない。
- Windows2000,XPはVirtualAllocだけではなく、GlobalAllocでも実際にメモリを使用しないと物理メモリを割り当ててくれない。
- WindowsXPは、GlobalAllocで割り当てたメモリも使用しなければどんどん仮想メモリに落とされてしまう。
ということ。
結局、GlobalAllocしたメモリに対してタイマーを貼って
読み書きを繰り返すようにすると、期待どおりの動作を得た。
ちなみに、ページファイルがあるのに、物理メモリを極限まで使っても、
動作が重くなるだけで何の意味もない?というつっこみはなし。
ただ、プログラミングできるだけで楽しかったのだ。そのころは。
こんな話をしたのは、Naruruの日記でid:Naruruさんが
これを思い出すような話をされていたから。
まだ、今日開設したばかりのブログなんで、こっそりトラックバックを
貼っておくだけにしときます(笑)
Inside Windowsか。いわゆるMicrosoft本はなかなか高価で手がでない。
今の興味はWindowsがりがりプログラミングでもないし。
しかし、昨今は本当に便利になったものだ。かなり苦労した情報が
こんなに簡単にWeb上で手に入るようになっているなんて。
さらに追記
どうもVS.NET2005Betaのヘルプでみると、
GlobalAllocはもう使えないAPIになってしまったらしい。
まあ、XPで上記のような動作になるんじゃ、
VirtualAllocと同じなんだから、当然といえば当然。
*1:もちろん仕事時間にプログラミングなどさせてもらえない。VSSのアカウントさえ与えられなかった。