変数に値が保存されるとき、メモリが利用されているのでしょうか。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2016/12/06 20:16:24
  • 終了:2016/12/08 21:42:23

ベストアンサー

id:cdaotg No.1

cdaotg回答回数89ベストアンサー獲得回数232016/12/06 20:56:51

プログラミングの話という前提で書かせて貰います。

まず、「変数に値を保存する」処理は、基本的には「メモリに値を書き込む」処理と同様です。

ただし、処理系(コンパイラなど)の最適化の際に、メモリを使わない様に変換する可能性はあります。

例えば、C言語で次の様なループを書いたとします。

int sum = 0;
for( size_t i = 0; i < 100; i++ ) sum += i;

この時、変数i,sumはメモリではなくレジスタ(CPU内部のデータ格納領域)を使用する事も有ります。
これは、コンパイラが「いちいちメモリを読み書きするより、レジスタ上に置いた方が高速だ」と判断した場合です。

まとめると、「基本的にはメモリに書き込む」ただし「最適化でレジスタを使う場合もある」という事です。

他2件のコメントを見る
id:TransFreeBSD

インタプリタも、今どきは中間コードへの実行時(JIT)コンパイルをするのが多いので、最適化もあります。
たしかに、変数が実体を持つならレジスタだけで収まる可能性は低いとは思いますが、
ループ展開とか、変数の共通化や定数化などで実体自体がなくなる可能性があります。
しかし、コンパイルも実行時であるとするなら、ループ展開のためのループ変数や、中間コードへ書き込む値という形でメモリ領域を使っているともいえるかもしれませんし、変数が出た段階で名前テーブルとしてメモリを使ってるともいえるかもしれません。
さらに、コンパイラ型ではコンパイル時のこういったことを考慮しないのか、とか、中間コードをキャッシュする場合はどうなんだとか、そんな話もあり得るので、結論としては

「あいまいなものなのでなんとも言えない」

とかいう話になるのでは?

2016/12/07 12:43:29
id:torimaki

コンパイルとインタープリタのちがいが、いまいち良くわかっていないようです、オレ。
まず、そのへんの理解をふかめることが必要かと。みなさま、ご意見、ありがとうございまーす!

2016/12/08 11:46:30

その他の回答(1件)

id:cdaotg No.1

cdaotg回答回数89ベストアンサー獲得回数232016/12/06 20:56:51ここでベストアンサー

プログラミングの話という前提で書かせて貰います。

まず、「変数に値を保存する」処理は、基本的には「メモリに値を書き込む」処理と同様です。

ただし、処理系(コンパイラなど)の最適化の際に、メモリを使わない様に変換する可能性はあります。

例えば、C言語で次の様なループを書いたとします。

int sum = 0;
for( size_t i = 0; i < 100; i++ ) sum += i;

この時、変数i,sumはメモリではなくレジスタ(CPU内部のデータ格納領域)を使用する事も有ります。
これは、コンパイラが「いちいちメモリを読み書きするより、レジスタ上に置いた方が高速だ」と判断した場合です。

まとめると、「基本的にはメモリに書き込む」ただし「最適化でレジスタを使う場合もある」という事です。

他2件のコメントを見る
id:TransFreeBSD

インタプリタも、今どきは中間コードへの実行時(JIT)コンパイルをするのが多いので、最適化もあります。
たしかに、変数が実体を持つならレジスタだけで収まる可能性は低いとは思いますが、
ループ展開とか、変数の共通化や定数化などで実体自体がなくなる可能性があります。
しかし、コンパイルも実行時であるとするなら、ループ展開のためのループ変数や、中間コードへ書き込む値という形でメモリ領域を使っているともいえるかもしれませんし、変数が出た段階で名前テーブルとしてメモリを使ってるともいえるかもしれません。
さらに、コンパイラ型ではコンパイル時のこういったことを考慮しないのか、とか、中間コードをキャッシュする場合はどうなんだとか、そんな話もあり得るので、結論としては

「あいまいなものなのでなんとも言えない」

とかいう話になるのでは?

2016/12/07 12:43:29
id:torimaki

コンパイルとインタープリタのちがいが、いまいち良くわかっていないようです、オレ。
まず、そのへんの理解をふかめることが必要かと。みなさま、ご意見、ありがとうございまーす!

2016/12/08 11:46:30
id:kazuyox No.2

kazuyox回答回数1ベストアンサー獲得回数02016/12/07 04:23:16

そうです

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません