ページ 1 / 1
実行ファイルの正体について
Posted: 2012年10月25日(木) 23:00
by dom
私はC言語ではコンパイルしてできた実行ファイルは機械語であると理解してました。
しかし、考えてみると一般的なソフトはCPUではなくOSをターゲットとしています。つまり、あるプラットフォームでコンパイルされた実行ファイルは、別のプラットフォームでもOSが同じなら動作するということになります。
ここで、機械語がCPU依存であることを考えると、OSが同じなら動作するという仕組みが分かりません。
このあたりはどういう仕組みになっているのでしょうか?
Re: 実行ファイルの正体について
Posted: 2012年10月25日(木) 23:14
by softya(ソフト屋)
> ここで、機械語がCPU依存であることを考えると、OSが同じなら動作するという仕組みが分かりません。
CPUに依存すると言っても同じ系列のCPUは同じ機械語が動きます。
俗にいうパソコンはx86系と言う系列のCPUですので同じ機械語が走ります。
>しかし、考えてみると一般的なソフトはCPUではなくOSをターゲットとしています。つまり、あるプラットフォームでコンパイルされた実行ファイルは、別のプラットフォームでもOSが同じなら動作するということになります
いいえ、プラットフォームが違えば動かない可能性があります。
例えば今度出るWindows8の一種であるWindow8RT(surfaceRT)はARMCPUですのでx86CPUの機械語は動作しません。つまり、今まで作られてきたwindows8も含めた機械語のデスクトップ・アプリはそのまま動作しない事になります。
つまり、機械語化されたアプリケーションはCPUとOSの2重の依存があります。
Re: 実行ファイルの正体について
Posted: 2012年10月25日(木) 23:35
by dom
ということは、例えばwindows XPで、CPUがcore2 Duoやcorei7やAMD製品の場合でも動くというのは、
windows XP=x86系という前提があったから、ということであっていますでしょうか?
Re: 実行ファイルの正体について
Posted: 2012年10月25日(木) 23:50
by softya(ソフト屋)
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
Re: 実行ファイルの正体について
Posted: 2012年10月26日(金) 15:38
by dom
なるほど、もやもやが解消しました。ありがとうございました。