Q.メモリリークを開放できますか?
A.できません。
世の中には開放できるとうたっているソフトもありますが、本来ハードウェアで電気的に隔離されているメモリ空間に、どうやってソフトウェアで影響を与えるのか見当も付きません。
※ちなみに、アプリケーションの権限でメモリを直接操作可能な手法もあるのですが、一般にそーゆーものは「セキュリティホール」と呼びます。はい。
Q.じゃぁどうやって最適化するの?
A.基本はスワップアウトです。
大メモリを要求することで仮想メモリ空間に物理メモリ上のデータを出力し、物理メモリを空けます。
故に最適化中には大負荷がかかります。
また、これらの処理の対象は、キャッシュデータと、移動可能状態として割り当てられているメモリ上のデータです。
なお、通常の最適化ソフトは大抵この状態で終了しますが、メモリの掃除屋さんは後処理として積極的な再配置を行います。
Q.積極的な再配置って?
A.スワップしたメモリ情報は必要になればOSの制御で再度読み込まれます。
遅延を考慮してない不良アプリを除いて、ほったらかしでもディスクアクセスが大量に発生して遅くなる以外の問題は起こりません。
しかしメモリの掃除屋さんでは、スワップアウトしたものから、システムに必須となるシステムDLL郡を事前に積極的に再読み込みします。
そのため、他のアプリケーションを使用する瞬間の再配置量を減らし、スワップアウトによる速度低下を極力減らすという工夫が盛り込んであるという事を言っています。
ちなみに、NT系でレジストリを編集してカーネルをメモリに常駐させている場合は、この機能は全く効果ありません。
(他にも小技は山ほどありますが、数十もある小技を説明するのもめんどくさいし、はっきり言ってキリが無いので割愛します)
Q.一定時間ごとに掃除する機能はありませんか?
A.定期的に不要なスワップを生むだけなので、マイナス要因の方が多いという認識を持っています。
まれにサーバー用途で有効な場合もありえますが(非常駐版や連動コマンドをATコマンドやタスクと併用する方が賢明です)、それ以外にはメリットはないと思います。
Q.最適化中にラグるのですが(ネットワークゲームなどで一時的に固まること)
A.OSの仕組み上、最適化中はOSが不安定になります。
つまり、OSが不安定になる時間を最小になるようにしようとする必要があり、そのため極力CPUパワーを使用するようにしています。
システムの安定性を取れば、そういったゲームとの並立は無理ですので、事前に多めに最適化を行い、ゲーム中は常駐しないと言うのが正しい使い方であると思います。
Q.OSが安定する理由は?
A.世の中には物理メモリが逼迫している状態で、メモリリークを起こすアプリケーションやドライバなど、相当な数が存在しています。
ソフトウェアという性質上、製品版やメーカー製品ですら信用できません。いや、私もプロですが・・・(苦笑)
つまり、物理メモリが逼迫している時間を極力減らすことで、メモリリークを誘発しにくくなり、安定度が増すというわけです。
逆の言い方をすれば、この時間をズルズル引き延ばすのは百害あって一利ないと思いますが・・・。
まずいプログラムのコーディング例
×
char *szTest = new char [1000];
strcpy(szTest, "aaaa");//メモリ確保に失敗した場合は一般保護違反になります
・・・
○
char *szTest = new char [1000];
if (szTest){
strcpy(szTest, "aaaa");
・・・
Q.負荷の高い時に実行されます
A.CPU使用率を見て判断していませんか?パフォーマンスモニタのCPU使用率は統計値ですので、現在の状態ではありません。
つまり、統計上CPU負荷がある程度高くても、現在の負荷状態をみて最適化処理を起動するようになっています。
※(こうしないとSpeedStep、HTなどの最新CPUでは意味をなしませんし)