16

Any CPU - Prefer 32 bit オプションは何をしますか?

WinRT は exe を処理できず、Windows ストア アプリしか実行できないことは承知していますが、StackOverflowには同じ質問をするいくつかの質問があり、どちらも次のブログを参照しています。

.NET 4.5 と Visual Studio 11 ではチーズが移動されました。ほとんどの .NET プロジェクトのデフォルトは再び AnyCPU ですが、AnyCPU には複数の意味があります。AnyCPU の追加のサブタイプ「Any CPU 32 ビット優先」があり、これが新しいデフォルトです (全体として、/platform C# コンパイラ スイッチには、x86、Itanium、x64、anycpu、anycpu32bitpreferred の 5 つのオプションがあります)。 )。AnyCPU のそのフレーバーを使用する場合、セマンティクスは次のようになります。

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

しかし、Surface RT を購入した後、Hello World プログラムを作成し、Any CPU に設定し、Prefer 32 Bit フラグを確認し、コンパイルして Surface にコピーしました。プログラムを実行すると、OS は、プログラムを実行できず、x86/x64 exe の場合と同じように市場に目を向けるべきだと言いました。表示された正確なメッセージは、「このアプリはお使いの PC では実行できません。この PC 用のアプリを見つけるには、Windows ストアを開いてください。」

では、これは実際に何をするのでしょうか? また、ARM で Window RT 用の Any CPU アプリケーションをコンパイルすることは可能でしょうか?

4

2 に答える 2

16

あなたが指定した引用だけに基づいて、それは次のことを意味することを示唆しています:

  • CPU が 32 ビット処理をサポートしている場合、最終的なマシン コードは 32 ビットになります (ARM か x86 かは関係ありません)。

  • そうでない場合、マシンコードは 64 ビットになります。

昔、AnyCPU は「私はプラットフォームにとらわれない」という意味でした。これは通常、64 ビット プラットフォームでは 64 ビット、それ以外では 32 ビットを取得することを意味していました。

ただし、64 ビット CPU でも 32 ビットが必要になる理由があります。ポインターのサイズが半分になるため、メモリの使用量が少なくなります。コードが小さいため、キャッシュなどにより多く収まります。しかし、CLR に 32 ビットを強制的に使用させ、必要な場合に 64 ビットを保持する方法はありませんでした。

現在、AnyCPU - 32 ビットが推奨されているため、ケーキ (必要に応じて 64 ビットをサポート) を食べて (可能な場合は 32 ビットをサポート) 食べることができます。

注: 私が間違っていなければ、Itanium は 32 ビット コードではなく 64 ビットのみをサポートするプラットフォームです。他にもあるかもしれないし、ないかもしれません。

免責事項: 私は専門家ではありません。これは、過去 6 か月ほどの間に読んださまざまなブログ投稿からのものです。

于 2012-10-31T03:27:29.070 に答える
1

Windows RT を実行するには、exe ファイルに署名する必要があります。ただし、RTをジェイルブレイクすると、Windows on ARM (.NET またはネイティブ ARM) アプリでサポートされている限り、任意のexe ファイルを実行できます。

.NET 4.5 および Visual Studio 11 で AnyCPU が実際に意味するものに関するこのオプションの詳細

于 2013-10-24T02:19:49.203 に答える