2017-12-12 21 views
0

Cプログラミング言語、BRIAN Wカーニハン& DENNIS M.リッチー 「Cは特定のシステムに縛られない、genereal目的言語である」コンパイラと命令は、右のコンパイラたちとしかし

を設定し、すべてのWindowsマシン上で動作する.exeを作ることができます。これは、Windowsが動作するすべてのCPU上で実行されることを意味します。

私の質問は、すべてのx86-64 CPU(IntelまたはAMD)が同じ命令セットを使用していますか?コンパイラが実行中のCPUを検出し、コンパイル時に適切な命令セットを使用すると仮定しなければなりません。

私はまったく間違っていますか?

私が話していることはほとんどわからないので、私と一緒にご負担ください。 フードの下を見ようとしているちょうど男。

+1

非常に粗く言った:はい、すべてのx86-64 CPU(IntelまたはAMD)は同じ命令セットを使用します。 –

+4

WindowsがARM上でも動作することを考えれば、「適切なコンパイラを使用することで、すべてのWindowsマシン上で実行される.exeを作ることができます。 Windows/ARMとWindows/x86-64の両方で同じネイティブ実行ファイルを実行することはできません。 – sepp2k

+0

"32と64ビットのCPU"と書かれているはずです –

答えて

5

Intelは「x86-64の」家族(とならない追加のプロセッサ・モデル)のコア命令セットを共有する多くの異なるプロセッサモデルになり、ありがとうございました。コア命令が共有されているプロセッサであっても、バリエーションがあります。より新しいモデルは、古いモデルにはない命令があり、命令セットのいくつかの部分は特定のモデル上にあり、他の部分にはない可能性があります。

命令によっては、プロセッサによっても動作が異なる場合があります。

プログラムをコンパイルすると、コンパイラは命令サブセットの特定の組み合わせを「ターゲット」にします。つまり、これらのサブセットの命令は、コンパイラがコードを生成しているときに使用できるようになります。コンパイラは、特定のプログラムをコンパイルするときに、そのニーズまたは選択に応じて、特定の命令またはサブセットを使用することも、使用しないこともあります。その結果得られるプログラムは、ターゲットとする命令を持つプロセッサーモデルに適していますが、他のモデルでは使用できません。

多くの場合、コンパイラのターゲットのデフォルト設定は、実行しているプロセッサモデルのようなプロセッサモデルか、最新のプロセッサモデルに共通の命令サブセットの選択です。ターゲットは、オペレーティングシステムの特定のバージョンを対象とするように求めるなど、コンパイラに与える他の設定に基づいて選択することもできます。しかし、インテルプロセッサで実行しているときにARMプロセッサ用にコンパイルするなど、まったく異なるアーキテクチャであっても、コンパイラスイッチを渡して完全に異なるターゲットに対してコンパイルすることができます。

ソフトウェアはコンピュータシステムの一部でもあるため、コンパイラが生成する実行可能ファイルは、実行時に使用できる特定のソフトウェアライブラリや、特定のオペレーティングシステムの機能に依存する場合があります。

関連する問題