実行ファイルの正体について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dom

実行ファイルの正体について

#1

投稿記事 by dom » 13年前

 私はC言語ではコンパイルしてできた実行ファイルは機械語であると理解してました。
しかし、考えてみると一般的なソフトはCPUではなくOSをターゲットとしています。つまり、あるプラットフォームでコンパイルされた実行ファイルは、別のプラットフォームでもOSが同じなら動作するということになります。
 ここで、機械語がCPU依存であることを考えると、OSが同じなら動作するという仕組みが分かりません。
このあたりはどういう仕組みになっているのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 実行ファイルの正体について

#2

投稿記事 by softya(ソフト屋) » 13年前

> ここで、機械語がCPU依存であることを考えると、OSが同じなら動作するという仕組みが分かりません。
CPUに依存すると言っても同じ系列のCPUは同じ機械語が動きます。
俗にいうパソコンはx86系と言う系列のCPUですので同じ機械語が走ります。

>しかし、考えてみると一般的なソフトはCPUではなくOSをターゲットとしています。つまり、あるプラットフォームでコンパイルされた実行ファイルは、別のプラットフォームでもOSが同じなら動作するということになります

いいえ、プラットフォームが違えば動かない可能性があります。
例えば今度出るWindows8の一種であるWindow8RT(surfaceRT)はARMCPUですのでx86CPUの機械語は動作しません。つまり、今まで作られてきたwindows8も含めた機械語のデスクトップ・アプリはそのまま動作しない事になります。

つまり、機械語化されたアプリケーションはCPUとOSの2重の依存があります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

dom

Re: 実行ファイルの正体について

#3

投稿記事 by dom » 13年前

ということは、例えばwindows XPで、CPUがcore2 Duoやcorei7やAMD製品の場合でも動くというのは、
windows XP=x86系という前提があったから、ということであっていますでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 実行ファイルの正体について

#4

投稿記事 by softya(ソフト屋) » 13年前

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(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

dom

Re: 実行ファイルの正体について

#5

投稿記事 by dom » 13年前

なるほど、もやもやが解消しました。ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る