動的コンパイルについての質問

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
タリスマンさん  
(No.1)
基本情報技術者 平成27年春期試験問題の午後問2の動的コンパイルに関する設問3についての質問です。

設問3の[条件]のところに

・関数Fの中間コードは400命令から成り,関数Fが1回呼び出されたときに実行する中間コードの命令数は,2,000命令である。

と書いてありますが、これはそもそもどういうことなのでしょうか?
関数Fの中間コードの400命令と、関数Fが呼び出されるごとに実行される中間コードの2,000命令とは一体何が違うのでしょうか?

また解説を見ると動的コンパイラでコンパイルするときは、400命令だけでよいというのもよく分かりません。
実際に実行される(?)と書かれている2,000命令はコンパイルしなくてよいのでしょうか?
なぜ400命令をコンパイルしただけで、実行される2,000命令の実行速度も速くなるのでしょうか?

どなたか詳しい方ご教授願えると幸いです。よろしくお願いします。
2017.04.03 20:26
昨年合格者さん 
(No.2)
自分が詳しいかと問われるとあまり自信はありませんが(笑)、中間言語が400命令で実行命令数が2000命令というのは、もともとのプログラムの中にループがあるのだと思います。同じ部分を何回も繰り返すことで、400しかない命令で2000回処理を行うという感じでしょうか。CDの歌詞カードにある「※くりかえし」のイメージに近いかもしれません。※の歌詞行が10行あるとすれば、「※くりかえし」1行で10行分を処理することになります。歌詞カードでの「※くりかえし」は1行で1回の繰り返しですが、プログラム内では「※10回くりかえし」とか「※100回くりかえし」ができますので、400命令で2000命令実行は、普通にありえます。
また、もともとのコード数(命令数)は400しかないので、コンパイルは400命令だけとなります。
2017.04.04 05:47
タリスマンさん  
(No.3)
>昨年合格者さん
なるほど、ループがあるということでしたか!
確かにそれだと書かれている命令は400でも、実際に実行するのは2,000ということがありそうですね。
解決しました、疑問に答えてくださりありがとうございました。
2017.04.04 21:17

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop