質問: ### 前提・実現したいこと かなり根本的な部分で質問すること自体お恥ずかしいのですが、「メモリ上にロードする」の意味を教えていただきたいです。 例えば、CG処理などの重い処理を行う場合(CG処理が重いかどうかは詳しくはわかりませんが)、何度も使用するサイズの大きいデータなどは一度読み込んだらメモリ上にロードしておくと処理の負担が軽減できるという話を聞きました。 そこでふと思ったのですが、プログラミング中何度も使うものは定数や変数としてあらかじめ持たせていおいて、それらを利用すると思うのですが、これも「メモリ上にロードする」ことととらえてよいのでしょうか? 上記のCG処理の例で言いますと、あるCGのデータが必要になったタイミングで一度そのCGデータを読み込み変数に格納しておき、再びそのCGデータを使用するときはその変数を利用する、といったことも「メモリ上にロードしておく」と同じことなのでしょうか? 非常に抽象的でわかりにくい質問かとは思いますが、「メモリ上にロードする」ということがどういうことなのか詳しく説明していただけないでしょうか。 ご回答を頂けると助かります_(._.)_
回答: ※実際のメモリー管理はOSが行っていて、もっと複雑な処理が行われています。ここで述べているのはあくまで概念的なものであることにご注意ください。 基本的には、補助記憶装置(ハードディスクなど)やネットワーク経由で読み取ったデータを主記憶装置(いわゆるRAMメモリー)に書き込んでCPUなどが読み込めるようにすることを、「メモリ上にロードする」と言います。 通常は、データを処理するためには、そのデータがメモリー上に無いといけません。大きなデータはロードに時間がかかるので、快適に処理を行うためにはあらかじめ読み込んでおくなどの対応が必要となります。 OSの機能で、良く使うデータは「キャッシュ」としてメモリー上に常駐され、何度も補助記憶装置から読み込まなくても良いようにしてくれますが、これはあくまでOS任せの機能で、空きが無くなれば当然消去されてしまいます。 これを自前で行うには、データを「ロード」するための自由に読み書き出きできる領域を確保しておく必要があります。 例えば、ソフトのつくりによっては、画像の一部あるいは全部のデータ(ビットマップデータなど)を「変数」に格納する、具体的には何バイトもの連続した領域を確保(C言語なら`alloc`、言語によってはバイト配列を`new`)して、そこに格納しておくことはあります。 この場合も、画像データをファイルから直接読み込む場合は「メモリ上にロード」と呼んで良いと思います。 JPEG形式の画像ファイルをデコードしてビットマップデータとして読み込む場合は、計算はしていますが、画像データを読み込むという意味では「メモリ上にロード」と言って良いと思います。 ... プログラムのコードもファイルとしてハードディスクに保存されているものをメモリーに転送してから実行していますので、「メモリ上にロード」していると言えます。 ただし、現在ではセキュリティー上の問題から、プログラムのコードは変数の領域とは隔離された領域にロードされます。 プログラムの中で計算した結果を保存しておくのは、ロードとは言いませんね。この場合は「キャッシュする」と言います。 定数の場合は「メモリ上にロード」に近いかも知れません。 ... 余談ですが、OS機能の関連で言うと、大きなファイルを読み込むのにメモリマップトファイルという機能を使うこともあります。 参考リンク: 主記憶装置 - Wikipedia メモリマップトファイル - Wikipedia