1. ホーム
  2. c#

[解決済み】Visual Studioの「32ビットを優先する」設定の目的と実際の動作は?

2022-04-06 15:31:37

質問

64ビット用にコンパイルする必要があるときに、コンパイラがどのように自動的に判断するのか、私には不明です。32ビットを確実にターゲットにできることを、コンパイラはどうやって知るのでしょうか?

コンパイル時にどのアーキテクチャをターゲットにするかをコンパイラがどのように判断しているのか、主に興味があります。コードを解析して、その結果に基づいて判断しているのでしょうか?

どのように解決するのですか?

マイクロソフトのブログエントリーに .NET 4.5とVisual Studio 11におけるAnyCPUの意味するところ :

<ブロッククオート

.NET 4.5とVisual Studio 11では、チーズが移動しました。そのため ほとんどの.NETプロジェクトのデフォルトは再びAnyCPUですが、それ以上のものがあります。 の1つの意味です。AnyCPUのサブタイプが追加されています。 "Any CPU 32-bit preferred" が新しいデフォルトです。 は、C#コンパイラの/platformスイッチのオプションが5つになりました:x86, Itanium、x64、anycpu、anycpu32bitpreferred)。32ビット版を使用する場合、quot;Prefer 32-Bit" フレーバーの AnyCPU を使用する場合、セマンティクスは次のようになります。

  • プロセスが32ビットWindowsシステム上で実行される場合、32ビットプロセスとして実行されます。ILは、x86マシンコードにコンパイルされます。
  • 64ビットWindowsシステムで実行する場合、32ビットプロセスとして実行されます。ILは、x86マシンコードにコンパイルされます。
  • ARM Windowsシステムで実行する場合、32ビットプロセスとして実行されます。ILはARMマシンコードにコンパイルされます。

では、「任意のCPU 32ビット優先」と「x86」の違いは何かというと、それは x86用にコンパイルされた.NETアプリケーションは、そのアプリケーションの実行に失敗します。 ARMのWindowsシステムでは、"Any CPU 32-bit preferred "のアプリケーションを使用することができます。 は正常に実行されます。