質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Q&A

解決済

7回答

11828閲覧

「メモリ上にロードしておく」ことの意味について。

tarotarosu

総合スコア114

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

0グッド

1クリップ

投稿2016/05/18 09:26

###前提・実現したいこと
かなり根本的な部分で質問すること自体お恥ずかしいのですが、「メモリ上にロードする」の意味を教えていただきたいです。

例えば、CG処理などの重い処理を行う場合(CG処理が重いかどうかは詳しくはわかりませんが)、何度も使用するサイズの大きいデータなどは一度読み込んだらメモリ上にロードしておくと処理の負担が軽減できるという話を聞きました。
そこでふと思ったのですが、プログラミング中何度も使うものは定数や変数としてあらかじめ持たせていおいて、それらを利用すると思うのですが、これも「メモリ上にロードする」ことととらえてよいのでしょうか?
上記のCG処理の例で言いますと、あるCGのデータが必要になったタイミングで一度そのCGデータを読み込み変数に格納しておき、再びそのCGデータを使用するときはその変数を利用する、といったことも「メモリ上にロードしておく」と同じことなのでしょうか?

非常に抽象的でわかりにくい質問かとは思いますが、「メモリ上にロードする」ということがどういうことなのか詳しく説明していただけないでしょうか。
ご回答を頂けると助かります_(..)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

はい。同一処理を行うのであれば、「より速く」、「より少ない資源で」これを実現するものは「優れたプログラム」といえます。(近年はコンピュータ技術が進歩して人的資源の方が重要視されるので、「作りやすさ」や「修正しやすさ」も大事な要素です)

HDDよりもメモリの方が圧倒的に処理速度が速いので、繰り返し使うデータはメモリ上に読み込んだままの方が「速く」処理を実行できる場合が多いです。ただし、例外もあります。当然ながらメモリ容量は有限であり、全てのデータを格納することはできません。使用頻度の少ないデータを欲張ってメモリ上に常駐させれば、重要なデータの読み込みに制限がかかります。優先順序付けすることが必要です。

投稿2016/05/18 10:23

編集2016/05/18 10:24
HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

HDDからメモリ上にロードするということでしょうか?

HDDに保存されたCG(画像)データや数値データを
メモリ上にロードすることで、高速にデータを扱うことができます。

使用するたびにHDD→メモリにロードすると時間がかかるので
使用しなくなるまでメモリ上にロードしておくほうが効率よく処理できます。
使用しなくなったらメモリ上から解放します。

つたない回答で申し訳ございません。

投稿2016/05/18 10:08

eleanor2352011

総合スコア44

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

メモリーと外部記憶媒体の速度に違いがあった場合、オンメモリーが速くていいですね。
通常は外部記憶媒体から読み出す数倍の速さがメモリーにあったのです。

では、SSDはどうでしょう?

4GBキャッシュ付きのHDDではどうでしょう?

さらに、128MBのS−RAMをキャッシュに持ち、2GBのDRAMつきのHDDがPCIExpressで接続されたらどうでしょう?

メインメモリーは2GBで十分になります。速くなりすぎてわくわくします。メモリーと速度が変わりませんね。

投稿2016/05/20 03:38

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2016/05/20 03:48

SATA/PCIe のバンド幅は 主記憶に比べると相当小さいッスよ?
退会済みユーザー

退会済みユーザー

2016/05/21 04:04

実際にはSD-RAMによるHDD互換のPCIeのがありましたが、実際にはやってません。全ビット出揃うまでWAITが入るのでシリアルATAになったと思います。3GBの速度なので、300KBぐらいは出るのでしょうか。シリアルのSATAとパラレルのPCIeで4レーンに128MBのFIFO接続と競争させたいです。
guest

0

プログラムを実行すると言うことは、その前にプログラムをメモリにロードすることが必要です。
また、データをCPUが処理するためには、その前にディスクからメモリにロードすることが必要です。
しかし、メモリにも論理メモリ(仮想メモリ)と、物理メモリ(実メモリ)という概念が有り、仮想記憶機構のことまで考えると難しくなります。

コンピューターの基本的な動作を理解しない状態で、単独の言葉の意味を知ろうとするのは、本当の意味が理解できないため、あまり意味が無いと思います。
何か今困りごとが有り、急場をしのげさえすればいいと言うことなら別ですが。
CPU、メモリ、ディスク、プログラム 等の意味をしっかり把握してからの方が良いと思います。
「コンピューターは何故動くのか」のような本を読むのをお勧めします。

投稿2016/05/18 13:57

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

プログラム(実行ファイル)は、メモリにロードされて
初めて実行することができるようになります。
「ロード」はかなりコストのかかる処理でして、
頻繁に繰り返すとコンピューター自体の負荷を高めます。

そこで、ロードしっぱなしならいいんじゃね?
という考えでメモリに常駐しているのが
Windows ではサービス、unix系だとデーモンと呼ばれるものです。
これはデータにも言えることですね。

ただし、メモリに常駐するということは、それだけ
他の用途に使えないという話でもあります。
それでも、潤沢に(物理的に)メモリを用意できるなら
メリットははかりしれないことでしょう。

投稿2016/05/18 10:26

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

はい、その理解で大体あっています。
変数とは、メモリの扱いをプログラミング言語上で抽象化したものですので。

投稿2016/05/18 09:49

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問