- - PR -
物理メモリの最適化プログラム
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-09-08 17:58
どなたか教えてください。
Windows OS において、物理メモリを最適化(クリーニング)するプログラムを作りたいのですが、メモリ管理の知識がほとんどなく、どのよに考えたらよいのか検討がつきません。(特に、非ページプールを最適化したいのです。) フリーのツールなんかを見ると、このてのプログラムが多く公開されていますが、みなさんどのように作られたのでしょうか? ヒントなるサイトでもありましたら、教えてもらえないでしょうか? よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-09-08 18:53
Inside Windowsの記述から抜粋すると「メモリを最適化して動作に高速にする便利なアルゴリズムなどありません。もしそんな魔法のようなアルゴリズムが実在するなら、間違いなくOSに実装します。」手元に本があるわけではないので、細かな表現は違いますが、そんな感じです。
大きなメモリを確保する事で、物理メモリ上のデータをスワップファイルに吐き出させます。その後、確保したメモリを開放します。これを行った後は物理メモリに空きが出来るので、一時的にメモリ確保などの動作がスムーズに動きます。 もちろんその為に不必要なスワップアウトを誘発し、大量のディスクアクセスを誘発しているのですから、動作速度はトータルでマイナスになります。 この手のツールではCompJapanなんかが有名ですね。:- | ||||||||||||
|
投稿日時: 2006-09-08 19:02
こんにちは。
基本的な話は甕星さんが語られている通りなので、私が言うことはなにもなかったりするわけですが…ひとつだけ。
CompJapan は「機能を謳っておいて実際は何もしていなかったサギソフト」な ので、あまりいい例ではないですね せめて「めもりくりーなー」あたりにしておいたほうが。 http://crocro.com/pc/soft/mclean/ _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||||||
|
投稿日時: 2006-09-08 19:08
面白そうなので少し調べてみました。役立つか分かりませんが。
どうやって実装するのだろうと思い色々探したところNativeAPIで物理メモリを読み取る方法が紹介されていました。このサンプルは読み取りしかしませんがサンプルソースのヘッダを見るとREADWRITEなんていうのも定義されているので書き込みも出来るのかもしれません。 sysinternals(PhysMem) 最適化の方法は甕星さんのおっしゃっている通りなんだと思います。 メモリの掃除屋さんのQ&A | ||||||||||||
|
投稿日時: 2006-09-08 22:11
回答でなくて申し訳ないのですが、
にもかかわらず
と考えるようなった理由とは、いかなるものなのでしょうか? 何か強いNeedsがあるのなら、まずそれを聞きたいという強い気持ちがあります。 | ||||||||||||
|
投稿日時: 2006-09-08 22:43
最適化とクリーニングとデフラグって、根本的に違うよね?
私の理解では、最適化をするには、デフラグをした上に、フラグメントが発生しにくいように並べ替える動作が必要かと思います。 クリーニングは、不要なもの、行儀の悪いプログラムが確保したまま放っているメモリを解放するのではないかと思います。または、利用されていないエリアを、特定の値で埋めるとか。 デフラグは、フラグメントを解消し、空きエリアをまとめるのではないかと思います。 スワップアウトさせることでは、デフラグが行われるのではないでしょうか。 で、どれがしたいの? 「このてのプログラムが多く公開されていますが」ってことで、デフラグだと思うのですが。。。 > 何か強いNeedsがあるのなら、まずそれを聞きたいという強い気持ちがあります。 同感 > 面白そうなので少し調べてみました。 回答者の動機(多数を占めると思っているけど、どうかな?) | ||||||||||||
|
投稿日時: 2006-09-08 23:41
よくあるメモリ最適化ツールは、WindowsがスワップしてまでI/Oキャッシュを
割り当てようとするアルゴリズムの癖をついたものが多かったような気がします。 定期的にスワップアウトするぎりぎりまでメモリを確保して、 キャッシュに使っていたメモリを空き状態に戻すって仕組みで。
純粋にプロセスに割り当てられたメモリ、という意味ならば、 プロセスが終了した時点で自動的に全て解放されます。 終了の時点でアドレス空間そのものが無くなりますし。 #95系でよく問題になってたリソースとは別の問題ですよ。
仮想メモリによる管理を行っているOSでは、アドレス空間がプロセス毎に 独立しているため、OS全体でのメモリ断片化は特に考える必要はありません。 プロセス毎やカーネル内の断片化はあるでしょうけど。 また、断片化した際も速度には(おそらくほとんど)影響はなく、 大きなサイズの連続したメモリブロックを確保できなくなったり、 ヒープの利用効率がほんの少し下がったりする程度でしょう。 普通のプログラムでは気にする必要なんかありません。
ページングの前後でマッピングされる物理アドレスが変わっても、 OSにとってもプロセスにとっても大した差はないですよ。 | ||||||||||||
|
投稿日時: 2006-09-09 09:19
スワップポストならぬ、クロスサイトポスト。
物理メモリの最適化プログラム _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |