###前提・実現したいこと
かなり根本的な部分で質問すること自体お恥ずかしいのですが、「メモリ上にロードする」の意味を教えていただきたいです。
例えば、CG処理などの重い処理を行う場合(CG処理が重いかどうかは詳しくはわかりませんが)、何度も使用するサイズの大きいデータなどは一度読み込んだらメモリ上にロードしておくと処理の負担が軽減できるという話を聞きました。
そこでふと思ったのですが、プログラミング中何度も使うものは定数や変数としてあらかじめ持たせていおいて、それらを利用すると思うのですが、これも「メモリ上にロードする」ことととらえてよいのでしょうか?
上記のCG処理の例で言いますと、あるCGのデータが必要になったタイミングで一度そのCGデータを読み込み変数に格納しておき、再びそのCGデータを使用するときはその変数を利用する、といったことも「メモリ上にロードしておく」と同じことなのでしょうか?
非常に抽象的でわかりにくい質問かとは思いますが、「メモリ上にロードする」ということがどういうことなのか詳しく説明していただけないでしょうか。
ご回答を頂けると助かります_(..)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答7件
0
ベストアンサー
※実際のメモリー管理はOSが行っていて、もっと複雑な処理が行われています。ここで述べているのはあくまで概念的なものであることにご注意ください。
基本的には、補助記憶装置(ハードディスクなど)やネットワーク経由で読み取ったデータを主記憶装置(いわゆるRAMメモリー)に書き込んでCPUなどが読み込めるようにすることを、「メモリ上にロードする」と言います。
通常は、データを処理するためには、そのデータがメモリー上に無いといけません。大きなデータはロードに時間がかかるので、快適に処理を行うためにはあらかじめ読み込んでおくなどの対応が必要となります。
OSの機能で、良く使うデータは「キャッシュ」としてメモリー上に常駐され、何度も補助記憶装置から読み込まなくても良いようにしてくれますが、これはあくまでOS任せの機能で、空きが無くなれば当然消去されてしまいます。
これを自前で行うには、データを「ロード」するための自由に読み書き出きできる領域を確保しておく必要があります。
例えば、ソフトのつくりによっては、画像の一部あるいは全部のデータ(ビットマップデータなど)を「変数」に格納する、具体的には何バイトもの連続した領域を確保(C言語ならalloc
、言語によってはバイト配列をnew
)して、そこに格納しておくことはあります。
この場合も、画像データをファイルから直接読み込む場合は「メモリ上にロード」と呼んで良いと思います。
JPEG形式の画像ファイルをデコードしてビットマップデータとして読み込む場合は、計算はしていますが、画像データを読み込むという意味では「メモリ上にロード」と言って良いと思います。
...
プログラムのコードもファイルとしてハードディスクに保存されているものをメモリーに転送してから実行していますので、「メモリ上にロード」していると言えます。
ただし、現在ではセキュリティー上の問題から、プログラムのコードは変数の領域とは隔離された領域にロードされます。
プログラムの中で計算した結果を保存しておくのは、ロードとは言いませんね。この場合は「キャッシュする」と言います。
定数の場合は「メモリ上にロード」に近いかも知れません。
...
余談ですが、OS機能の関連で言うと、大きなファイルを読み込むのにメモリマップトファイルという機能を使うこともあります。
参考リンク:
主記憶装置 - Wikipedia
https://ja.wikipedia.org/wiki/%E4%B8%BB%E8%A8%98%E6%86%B6%E8%A3%85%E7%BD%AE
メモリマップトファイル - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%9E%E3%83%83%E3%83%97%E3%83%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB
投稿2016/05/18 14:24
総合スコア9388
0
はい。同一処理を行うのであれば、「より速く」、「より少ない資源で」これを実現するものは「優れたプログラム」といえます。(近年はコンピュータ技術が進歩して人的資源の方が重要視されるので、「作りやすさ」や「修正しやすさ」も大事な要素です)
HDDよりもメモリの方が圧倒的に処理速度が速いので、繰り返し使うデータはメモリ上に読み込んだままの方が「速く」処理を実行できる場合が多いです。ただし、例外もあります。当然ながらメモリ容量は有限であり、全てのデータを格納することはできません。使用頻度の少ないデータを欲張ってメモリ上に常駐させれば、重要なデータの読み込みに制限がかかります。優先順序付けすることが必要です。
投稿2016/05/18 10:23
編集2016/05/18 10:24総合スコア4830
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
HDDからメモリ上にロードするということでしょうか?
HDDに保存されたCG(画像)データや数値データを
メモリ上にロードすることで、高速にデータを扱うことができます。
使用するたびにHDD→メモリにロードすると時間がかかるので
使用しなくなるまでメモリ上にロードしておくほうが効率よく処理できます。
使用しなくなったらメモリ上から解放します。
つたない回答で申し訳ございません。
投稿2016/05/18 10:08
総合スコア44
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
メモリーと外部記憶媒体の速度に違いがあった場合、オンメモリーが速くていいですね。
通常は外部記憶媒体から読み出す数倍の速さがメモリーにあったのです。
では、SSDはどうでしょう?
4GBキャッシュ付きのHDDではどうでしょう?
さらに、128MBのS−RAMをキャッシュに持ち、2GBのDRAMつきのHDDがPCIExpressで接続されたらどうでしょう?
メインメモリーは2GBで十分になります。速くなりすぎてわくわくします。メモリーと速度が変わりませんね。
投稿2016/05/20 03:38
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/05/21 04:04
0
プログラムを実行すると言うことは、その前にプログラムをメモリにロードすることが必要です。
また、データをCPUが処理するためには、その前にディスクからメモリにロードすることが必要です。
しかし、メモリにも論理メモリ(仮想メモリ)と、物理メモリ(実メモリ)という概念が有り、仮想記憶機構のことまで考えると難しくなります。
コンピューターの基本的な動作を理解しない状態で、単独の言葉の意味を知ろうとするのは、本当の意味が理解できないため、あまり意味が無いと思います。
何か今困りごとが有り、急場をしのげさえすればいいと言うことなら別ですが。
CPU、メモリ、ディスク、プログラム 等の意味をしっかり把握してからの方が良いと思います。
「コンピューターは何故動くのか」のような本を読むのをお勧めします。
投稿2016/05/18 13:57
総合スコア84505
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
プログラム(実行ファイル)は、メモリにロードされて
初めて実行することができるようになります。
「ロード」はかなりコストのかかる処理でして、
頻繁に繰り返すとコンピューター自体の負荷を高めます。
そこで、ロードしっぱなしならいいんじゃね?
という考えでメモリに常駐しているのが
Windows ではサービス、unix系だとデーモンと呼ばれるものです。
これはデータにも言えることですね。
ただし、メモリに常駐するということは、それだけ
他の用途に使えないという話でもあります。
それでも、潤沢に(物理的に)メモリを用意できるなら
メリットははかりしれないことでしょう。
投稿2016/05/18 10:26
総合スコア7458
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。