- - PR -
クロスコンパイラとはどのようなものか
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-16 02:00
クロスコンパイラについて質問がございます.
クロスコンパイラについては,以下のように説明されております. プログラマが高等言語で作成したソースコードを解釈し、開発に使用しているのとは異なる機種で実行可能な機械語のプログラムを生成するソフトウェア。生成した実行可能形式のプログラムは、開発機からターゲットとする機種にケーブルなどで転送してから実行する。 参考URL:http://e-words.jp/w/E382AFE383ADE382B9E382B3E383B3E38391E382A4E383A9.html 私自身は,クロスコンパイラとは以下のように認識しております. 何か間違っている点がありましたらご指摘下さい. 例えば,ゲーム用のプログラムがあるとする. ゲーム機上で,プログラムを開発するのは困難なので,PC上でプログラムを開発する. 1.PC上で,ゲーム用のプログラムのソースコードをJavaで記述する. 2.クロスコンパイラにより,ソースコードをJava → 機械語 に変換. 3.機械語に変換されたソースコードをゲーム機に転送 | ||||||||
|
投稿日時: 2006-08-16 03:40
こんばんは
Javaの場合はちょっと違いますよ! Javaの場合はJavaバイナリを仮想マシン上で動作させます。 プラットフォームごとにJava仮想マシンプログラムがあり、基本的に同じJavaバイナリを他のプラットフォームで動作させることが可能になります。 CPUやハードウェアの違いをJava仮想マシンが吸収してくれます。 ※バイナリ互換 あと用語の理解が正しくないようで... ソース=機械語やJavaバイナリなど実行プログラムの元になるもの 機械語=CPUが理解できるプログラム Javaバイナリ=Java仮想マシン上で動作するプログラム クロスコンパイラは「実行する環境」とは「違う環境で開発し機械語もしくはニーモニックを生成する」プログラムのことです たとえばゲーム用のプログラムなら 1.PC(WindowsやLinuxなど)でプログラムソースを作成 2.ソースから実行環境(PSPなど)に合わせた機械語を生成(クロスコンパイル) 3.生成された機械語を実行環境に転送 4.実行 余談ですがエミュレータなどは仮想マシンと概念的に同じものです。 [ メッセージ編集済み 編集者: 未記入 編集日時 2006-08-16 03:41 ] | ||||||||
|
投稿日時: 2006-08-16 08:21
確かにJavaの場合は違いますね. 仮に,プログラムの実行環境にJava仮想マシンがあるとします. その場合は,CPUやハードウェアの違いをJava仮想マシンが吸収してくれるので, クロスコンパイラでわざわざ実行環境で動作する機械語に変換する必要がないという 理解で宜しいでしょうか?
了解しました. プログラムの実行環境として,PSPの例をあげて説明して頂きましたが,わかりやすかったです. | ||||||||
|
投稿日時: 2006-08-16 14:16
>仮に,プログラムの実行環境にJava仮想マシンがあるとします.
>その場合は,CPUやハードウェアの違いをJava仮想マシンが吸収してくれるので, >クロスコンパイラでわざわざ実行環境で動作する機械語に変換する必要がないという >理解で宜しいでしょうか? はい。そうです。 「必要がない」というよりは,それがJAVAの動作仕様となります。 あとJavaの場合,仮想マシン経由で実行されますので,当然,機械語よりは遅いですが。 | ||||||||
|
投稿日時: 2006-08-16 16:39
何となく釣られてみます。 HotSpotなJVMだと下手なアセンブラなコードより速い事すらありますよ。 もちろんチューンしたアセンブラのコードには勝ち目あるわけないですが。 | ||||||||
|
投稿日時: 2006-08-16 16:50
Javaのソースからネイティブな実行コードを生成する、古典的な意味での「Javaコンパイラ」も存在します(GCJ)。
その場合、もちろん「Javaのクロスコンパイラ」というのもあり得ます。 | ||||||||
|
投稿日時: 2006-08-16 17:06
>HotSpotなJVMだと下手なアセンブラなコードより速い事すらありますよ。
経験不足か,あまりそういったケースにお目にかかった事が無いもので・・・。 言語の得手・不得手はあるでしょうが,私の経験上は,同一機能においても だいたいCとかの方が早い事が多いです。 速度以外のメリットがもちろん大きいですが。 >Javaのソースからネイティブな実行コードを生成する、古典的な意味での「Javaコンパイラ」>も存在します(GCJ)。 >その場合、もちろん「Javaのクロスコンパイラ」というのもあり得ます。 ご指摘ありがとうございます。 | ||||||||
|
投稿日時: 2006-08-16 17:39
>だいたいCとかの方が早い事が多いです。
ほとんどあらゆるケースにおいて、これは真でしょうね。 アセンブラは基本的に「そのまま」(1対1という意味で)実行される以上、本当にヘタな書き方をしていたら、その環境専用のJVMの持つコードのほうが洗練されているだろうから、速いかも知れない…ということでしょう。 今時アセンブラで書く人が、それほど無駄なコードを書くことはあんまりないでしょうが。 |