• ベストアンサー

プログラム単位での仮想メモリの割当て

特定のプログラムの使用するメモリを仮想メモリに割り当てて、物理メモリには余裕を持たせておくようなフリーソフトはないでしょうか? 例えば物理メモリ1GB、仮想メモリ1500MBあったとして 通常なら物理メモリの1GBを超えた場合に、仮想メモリを使いだしますよね。 そうではなく、 仮に通常のメモリ使用量が400MB+ソフトAのメモリ使用量が700MBだったとした場合 物理メモリ:通常時の400MB 仮想メモリ:ソフトAの700MB もしくは物理メモリに200MBほど足してその中で残りのソフトAの仮想メモリ消費500MBを交換してやりくりするなど。 多くのメモリを消費するソフトAを非アクティブにして、他の作業をする際に物理メモリの上限値を超えていて、動作が重いのでなんとかならないかと思って質問させて頂きました。 ソフトAの動作は遅くなっても構いません。 良いソフトや方法がありましたらよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • torayoshi
  • ベストアンサー率62% (910/1449)
回答No.5

torayoshiです。 >> 物理メモリ内のデータを仮想メモリとして「一時的に退避させたい」 > 出来ません。 と書いたのは、ユーザーが自由にそれらの操作を行えない。 という意味でした。 250MBしかないメモリで一つのソフトが200MB使ってるとなると、 ソフト本体のデータもスワップされていることになりますね。 ソフトを起動しただけでなにも作業が行われなければ ソフト本体のデータも古いデータに含まれるからです。 (この部分は書き損じておりました。失礼しました) メモリ開放ソフトを使うと物理メモリ量が増えた。とのことですが、 割り当て量が縮小したと考えるよりも、ソフトを終了しても開放し切れなかった分のメモリが開放された。 と考えるべきでしょう。 プロセス欄から隠れてるのでは割り当ての縮小は難しいですね。 それが出来るソフトって聞いたことがないです。 申し訳ありません、私が答えれるのはここまでです。 というか、プロセスにも出てこないソフトって一体…?

Raisu4
質問者

お礼

度々回答ありがとうございます。 そういう意味だったんですね。わかり易い解説でやっと疑問が解消しました。 物理メモリのスペースの残量が500MBほど増えた時には、そのソフトを終了していないので、 ソフトを終了しても解放しきれなかった分のメモリが開放されたようには思えないのですが…。 (そのソフトが600MB消費、その他のソフト+システムで400MBほど消費なので500MB減るだけの解放しきれなかった分のメモリなど存在しないはず?) プロセス欄から隠ぺいされているソフトは、同じような質問を見かけるんですが解決法が中々見つかりませんでした。 とにかくある程度の疑問が解けたので、そろそろ回答を締め切ることにします。 torayoshiさん、度々の解説ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • torayoshi
  • ベストアンサー率62% (910/1449)
回答No.4

> この場合なぜアプリは強制終了しないのでしょう? ソフトを通常のメモリ割り当てで使用する分には強制終了されないでしょう。 データが仮想メモリへ一時退避(スワップ)されるのは、 そのソフトを使用し、なんらかの作業中(図形を書いた、文字を入力したなど) 新しいデータが入ってきた時にそれを処理するためのメモリがない場合などです。 仮想メモリへそれまでの古いデータを一時退避し処理し終えた時 仮想メモリから読み取り書き込むといった一連の処理を繰り返しています。 ごく稀にソフトが欲張ってもっとメモリが欲しいと考え、 他のソフトに割り当てられているメモリを横取りしようとした場合も 強制終了されます。 これが「ページ違反」です(もっと広義でなら「一般保護違反」) ソフトのメモリ割り当ての変更はタスクマネージャから出来ます。 もっとも数値を指定して何MBとというふうには出来ません。 「リアルタイム」~「低」まで6段階です。

Raisu4
質問者

お礼

何度も回答ありがとうございます。 解説して下さった内容は理解出来るのですが、 #3のお礼で挙げた例では、物理メモリ250MBしかない中でソフトAを起動させているので、 ソフトAを通常のメモリ割り当てで使用するスペースがほとんど無い状態ですよね? その場合に古いデータしか仮想メモリへ一時退避出来ない、かつ仮想メモリ内でアプリは動作出来ないなら 何故このアプリは動作出来ているんでしょう?という意味で質問させて頂きました。 (物理メモリにソフトAのデータがあるのなら、仮想メモリへデータを一時退避出来たという事になりますし、#3の3行目で出来ないと指摘された意味が理解できないのですが…) タスクマネージャは気付きませんでした…ありがとうございます。 使ってみたいんですが、そのソフトAというのがプロセスから隠されているんですよね…。 名前が違う云々ではなく、プロセス数も起動前後で変化しませんし、 CPU使用率100%中もプロセスのCPU使用率は合計10%に満たないんです。 なんだか何度も回答して頂いても振れるポイントの上限は変わりませんし、長々とやってもご迷惑かと思いますので、 最終的に#3のお礼でも簡単に書いた(7行目の)ようには、やはり実現出来ないんですかね。

すると、全ての回答が全文表示されます。
  • torayoshi
  • ベストアンサー率62% (910/1449)
回答No.3

#1です。 > 物理メモリ内のデータを仮想メモリとして「一時的に退避させたい」 出来ません。 仮想メモリに一時退避出来るデータは「古い」一部のデータだけです。 全データは退避出来ません。 仮にそんなことが出来たとしたらアプリは強制終了させられてしまいます。 ですが、重いアプリ(この場合はソフトA)のメモリ割り当てを縮小することは出来ます。 ソフトAは更に重くなりますが、その分他のアプリに余分にメモリを割り当てられます。 それから物理メモリが1Gあったとしても、実際に一つのアプリが使えるメモリ量は数十MBからせいぜい数百MBです。 この割り当てを縮小すると更に重くなる理屈は分かりますね? スワップ量が更に増えるからです。 もう少し仮想メモリを勉強されることをお勧めします。

Raisu4
質問者

お礼

度々解説ありがとうございます。 私のノートPCは物理メモリ250MBで、通常時のメモリ消費量200MB程度なんですがソフトAを動作させると、 物理メモリ250MB+仮想メモリ500MBほどでスワップ量が増えて重くはなりますが、正常に動作します。 もし仮想メモリとして一時的に退避できないのなら、この場合なぜアプリは強制終了しないのでしょう? 全データは退避出来ないのは予想していたので質問文でも、メモリ割り当ての縮小でも構わない趣旨(8行目)を書いていたのですが、実際にその指定したアプリ毎に設定できるソフトが中々見つからなくてこちらで質問させて頂きました。 簡単に言うと、このノートPCの例のように動作させて物理メモリに余裕を持たせておきたいんです。(もちろんソフトAの動作が遅くなるのは構いません) なんだか何度も質問してしまい、申し訳ありません。 いちおう#2さんの紹介して下さったソフトを使うと… 使用前:合計1GB消費、物理メモリ残量50MB 使用後:合計1GB消費、物理メモリ残量500MB に変わったと表示されるのでメモリ割り当ての縮小が出来たと思うのですが…これを指定したアプリケーションの使用しているメモリのみに適用したいんです。 よろしくお願い致します。

すると、全ての回答が全文表示されます。
  • mk48a
  • ベストアンサー率56% (1133/2007)
回答No.2

ご質問のような細かい設定はできません。仮想メモリの管理はOSの役割です。 ただ、物理メモリを多く確保したい場合は「めもりーくりーなー」が使えるかもしれません。 私は使ったことが無いですが、試してみてはどうですか? サイトは以下にあります。

参考URL:
http://crocro.com/pc/soft/mclean/index.html
Raisu4
質問者

お礼

仮想メモリの細かい設定はできないんですね…。 参考URLの方、定期的にメモリの掃除もしてくれるんですね。 試してみます、ありがとうございました。

すると、全ての回答が全文表示されます。
  • torayoshi
  • ベストアンサー率62% (910/1449)
回答No.1

仮想メモリをなにか勘違いされてるようです。 アプリケーションは物理メモリ内でしか作動しません。 仮想メモリはあくまで「データを一時的に退避させておく」一時避難場所です。

Raisu4
質問者

補足

ソフトAを非アクティブにした時に(つまり使わないときに)、アプリケーションを終了せずに 物理メモリ内のデータを仮想メモリとして「一時的に退避させたい」という意味です。 この考え方は勘違いした考え方でしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A