No. | 質問・回答 | おれい |
|
[80371] コンパイル後の実行ファイル(.exe)は、なぜ異マシンで動作するのでしょうか? |
|
|
大抵のWindows用ソフトウェアはEXE形式で配布され、ほとんどの場合
Windowsであればそのソフトウェアが使用できます。
つまりEXEはマシン語のはずなのになぜ異なるマシン上で動作するので
しょうか?
私がなにか勘違いをしているのなら、どこを勘違いしているかしている
か教えてください。
r.ogawa (未登録) 2006年4月29日21:51
|
|
|
|
[80392] |
EXEにもよりますが、マシン語(ハードウェアの操作やメモリに関する部分)は
Microsoftが提供している共通ライブラリ(.DLLなど)を呼び出して動かしている
アプリがほとんどですので、一般的なアプリケーションはそこまで気を使って
作られてはいないでしょうね。
また、配布されているようなアプリ(.EXE)は作り手側で動くように検証している
から動くと言うことでしょうか。
もちろん共通ライブラリもWindowsのバージョンによって呼び出しの関数に違い
があるのですが、そのあたりもライブラリ側で古いレベルの関数もサポート
してあったり 作り手側が気を使って、Windowsのバージョンに左右されない
関数を使用している場合などさまざまです。
さらに、VBやVC、JAVAなどで作られたアプリはそれぞれのバージョンにあわせて
RunTimeLibralyが用意されてるのはご存知でしょうか。
RunTimeLibraly側でもそういった配慮がなされています。
>私がなにか勘違いをしているのなら、どこを勘違いしているかしている
>か教えてください。
勘違いと言うより勉強不足ですね。
一度生Cで簡単なアプリを作って見るのも一考かと。
はずし太郎 (未登録) 2006年4月30日14:27
|
|
|
|
[80393] |
ありがとうございます。
とても参考になりました。
もっとちゃんと勉強してから出直してきます。
r.ogawa (未登録) 2006年4月30日17:39
|
|
|
|
[80413] |
まあ、出直さないでも(苦笑)
>つまりEXEはマシン語のはずなのに
ここがまず間違いですね。マシン語ではありません。
Cなり何なりの「コンパイルした後」のバイナリファイルです。
ですので、このファイルはOSが解釈実行します。OSが読み、
実行できるファイルならば、機種とは関係なく動作するのです。
逆に言えば、OSが違う場合、同じマシンでも実行できない
ことがあるわけで、このことを専門的に言ったのが
「はずし太郎」さんの回答になります。
mory (512) 2006年5月1日10:49
|
|
|
|
[80418] |
>ここがまず間違いですね。マシン語ではありません。
そうですか?
http://e-words.jp/w/E3839EE382B7E383B3E8AA9E.html
>Cなり何なりの「コンパイルした後」のバイナリファイルです。
このバイナリファイルは基本的には「マシン語」を収めたものです。
(厳密にはマシン語以外に、OSがメモリ上に読み出して実行するためのアドレス情報なども含まれますが)
ご質問の内容については、こちらなどが参考になるかと思われます。
http://oooug.jp/start/open/open01.html
尚、
>マシン語のはずなのになぜ異なるマシン上で動作するのでしょうか?
少し誤解があるようですね。「マシン語」の「マシン」はCPUのことです。
maido (2696) 2006年5月1日12:33
|
|
|
|
[80420] |
エミュレーターというのもあります。
Z80というCPUのマシン語を 別の マシン語が 解読して 実行するというものです。
ま、翻訳みたいなもんですが・・・。
ちなみに、Windowsがベースで動いているDOS/Vと呼ばれるものは、
ほとんど同じマシン語ですね。
Macで Windowsを動かす場合は、最初に書いたエミュレーターということを
やっています。
taknt (474) 2006年5月1日14:20
|
|
|
|
[80448] |
moryさんmaidoさんtakntさん、ありがとうございました。
http://oooug.jp/start/open/open01.html を早速読んでみます。
みなさん、回答ありがとうございました。
r.ogawa (未登録) 2006年5月2日17:27
|
|
|
|
( 参照数:2544 日平均:0.4 ) |
|
〜 回答の受付を終了しました 〜 |