必要なときにコンパイラーが64ビット用にコンパイルする方法をコンパイラーがどのように自動的に認識するかは不明です。自信を持って32ビットをターゲットにできる場合、それはどのようにしてわかりますか?
私は主に、コンパイラーがコンパイル時にどのアーキテクチャーをターゲットにするかを知る方法に興味があります。それはコードを分析し、見つけたものに基づいて決定を下しますか?
必要なときにコンパイラーが64ビット用にコンパイルする方法をコンパイラーがどのように自動的に認識するかは不明です。自信を持って32ビットをターゲットにできる場合、それはどのようにしてわかりますか?
私は主に、コンパイラーがコンパイル時にどのアーキテクチャーをターゲットにするかを知る方法に興味があります。それはコードを分析し、見つけたものに基づいて決定を下しますか?
回答:
Microsoftのブログエントリには、AnyCPUが.NET 4.5およびVisual Studio 11に関して実際に意味するもの:
.NET 4.5およびVisual Studio 11では、チーズが移動されました。ほとんどの.NETプロジェクトのデフォルトはAnyCPUですが、AnyCPUには複数の意味があります。AnyCPUには、新しいデフォルトである「Any CPU 32ビット優先」というサブタイプが追加されています(全体として、/ platform C#コンパイラスイッチには、x86、Itanium、x64、anycpu、anycpu32bitpreferredの5つのオプションがあります。 )。AnyCPUの「32ビット優先」フレーバーを使用する場合、セマンティクスは次のとおりです。
- プロセスが32ビットWindowsシステムで実行される場合、32ビットプロセスとして実行されます。ILはx86マシンコードにコンパイルされます。
- プロセスが64ビットWindowsシステムで実行される場合、32ビットプロセスとして実行されます。ILはx86マシンコードにコンパイルされます。
- プロセスがARM Windowsシステムで実行される場合、32ビットプロセスとして実行されます。ILはARMマシンコードにコンパイルされます。
次に、「任意のCPU 32ビット優先」と「x86」の違いはこれだけです。x86にコンパイルされた.NETアプリケーションはARM Windowsシステムで実行できませんが、「任意のCPU 32ビット優先」アプリケーションです。正常に実行されます。
Project -> Properties -> Build tab -> Platform target
。ただしAnyCPU-32bitPreferred
、.Netバージョン4.5以降でのみ使用できます。そのため、デフォルトはAnyCPU
です。
その理由は、64ビットアプリケーションでより多くのメモリを使用したくない場合です。つまり、アプリケーションがAnyCPUの場合、32ビットとして実行する必要があります。
さらに追加するために、Visual Studioの設定は特定のCLRを対象としています。
Visual Studioは、32ビットバージョンのCLRをx86コンピューターにインストールし、32ビットバージョンと適切な64ビットバージョンのCLRの両方を64ビットWindowsコンピューターにインストールします。(Visual Studioは32ビットアプリケーションであるため、64ビットシステムにインストールすると、WOW64で実行されます。)
記事64ビットアプリケーション(MSDN)を参照してください。