私はC言語ではコンパイルしてできた実行ファイルは機械語であると理解してました。
しかし、考えてみると一般的なソフトはCPUではなくOSをターゲットとしています。つまり、あるプラットフォームでコンパイルされた実行ファイルは、別のプラットフォームでもOSが同じなら動作するということになります。
ここで、機械語がCPU依存であることを考えると、OSが同じなら動作するという仕組みが分かりません。
このあたりはどういう仕組みになっているのでしょうか?
実行ファイルの正体について
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 実行ファイルの正体について
> ここで、機械語がCPU依存であることを考えると、OSが同じなら動作するという仕組みが分かりません。
CPUに依存すると言っても同じ系列のCPUは同じ機械語が動きます。
俗にいうパソコンはx86系と言う系列のCPUですので同じ機械語が走ります。
>しかし、考えてみると一般的なソフトはCPUではなくOSをターゲットとしています。つまり、あるプラットフォームでコンパイルされた実行ファイルは、別のプラットフォームでもOSが同じなら動作するということになります
いいえ、プラットフォームが違えば動かない可能性があります。
例えば今度出るWindows8の一種であるWindow8RT(surfaceRT)はARMCPUですのでx86CPUの機械語は動作しません。つまり、今まで作られてきたwindows8も含めた機械語のデスクトップ・アプリはそのまま動作しない事になります。
つまり、機械語化されたアプリケーションはCPUとOSの2重の依存があります。
CPUに依存すると言っても同じ系列のCPUは同じ機械語が動きます。
俗にいうパソコンはx86系と言う系列のCPUですので同じ機械語が走ります。
>しかし、考えてみると一般的なソフトはCPUではなくOSをターゲットとしています。つまり、あるプラットフォームでコンパイルされた実行ファイルは、別のプラットフォームでもOSが同じなら動作するということになります
いいえ、プラットフォームが違えば動かない可能性があります。
例えば今度出るWindows8の一種であるWindow8RT(surfaceRT)はARMCPUですのでx86CPUの機械語は動作しません。つまり、今まで作られてきたwindows8も含めた機械語のデスクトップ・アプリはそのまま動作しない事になります。
つまり、機械語化されたアプリケーションはCPUとOSの2重の依存があります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
dom
Re: 実行ファイルの正体について
ということは、例えばwindows XPで、CPUがcore2 Duoやcorei7やAMD製品の場合でも動くというのは、
windows XP=x86系という前提があったから、ということであっていますでしょうか?
windows XP=x86系という前提があったから、ということであっていますでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 実行ファイルの正体について
そうですね。同じ機械語が動くという前提があるからです。dom さんが書きました:ということは、例えばwindows XPで、CPUがcore2 Duoやcorei7やAMD製品の場合でも動くというのは、
windows XP=x86系という前提があったから、ということであっていますでしょうか?
ただし、Windows XP(64bit)など64bit系OSではx64系専用の機械語が動きます。
つまり、x64系専用の機械語にコンパイルされたアプリケーションはWindows XP(32bit)では動作しません。
これは機械語の依存の問題です。
ちなみに逆が動くのはx64上でx86の機械語をハードウェア・OSレベルで動かす仕組み(wow64)があるからです。
「WOW64 - Wikipedia」
http://ja.wikipedia.org/wiki/WOW64
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。