Intelは「x86-64の」家族(とならない追加のプロセッサ・モデル)のコア命令セットを共有する多くの異なるプロセッサモデルになり、ありがとうございました。コア命令が共有されているプロセッサであっても、バリエーションがあります。より新しいモデルは、古いモデルにはない命令があり、命令セットのいくつかの部分は特定のモデル上にあり、他の部分にはない可能性があります。
命令によっては、プロセッサによっても動作が異なる場合があります。
プログラムをコンパイルすると、コンパイラは命令サブセットの特定の組み合わせを「ターゲット」にします。つまり、これらのサブセットの命令は、コンパイラがコードを生成しているときに使用できるようになります。コンパイラは、特定のプログラムをコンパイルするときに、そのニーズまたは選択に応じて、特定の命令またはサブセットを使用することも、使用しないこともあります。その結果得られるプログラムは、ターゲットとする命令を持つプロセッサーモデルに適していますが、他のモデルでは使用できません。
多くの場合、コンパイラのターゲットのデフォルト設定は、実行しているプロセッサモデルのようなプロセッサモデルか、最新のプロセッサモデルに共通の命令サブセットの選択です。ターゲットは、オペレーティングシステムの特定のバージョンを対象とするように求めるなど、コンパイラに与える他の設定に基づいて選択することもできます。しかし、インテルプロセッサで実行しているときにARMプロセッサ用にコンパイルするなど、まったく異なるアーキテクチャであっても、コンパイラスイッチを渡して完全に異なるターゲットに対してコンパイルすることができます。
ソフトウェアはコンピュータシステムの一部でもあるため、コンパイラが生成する実行可能ファイルは、実行時に使用できる特定のソフトウェアライブラリや、特定のオペレーティングシステムの機能に依存する場合があります。
非常に粗く言った:はい、すべてのx86-64 CPU(IntelまたはAMD)は同じ命令セットを使用します。 –
WindowsがARM上でも動作することを考えれば、「適切なコンパイラを使用することで、すべてのWindowsマシン上で実行される.exeを作ることができます。 Windows/ARMとWindows/x86-64の両方で同じネイティブ実行ファイルを実行することはできません。 – sepp2k
"32と64ビットのCPU"と書かれているはずです –