Visual Studio 2012中的“首选32位”设置的目的是什么?它实际上是如何工作的?

在这里输入图像说明

我不清楚编译器在需要的时候会自动知道如何编译64位。 它如何知道什么时候可以自信地瞄准32位?

我主要对编译器在编译时如何知道目标架构感到好奇。 它分析代码并根据它发现的结果做出决定吗?

很奇怪,没有人链接到博客条目What AnyCPU真正意义的.NET 4.5和Visual Studio 11

在.NET 4.5和Visual Studio 11中,奶酪已经移动。 大多数.NET项目的默认设置都是AnyCPU,但现在AnyCPU的含义不止一个。 有一个额外的子types的AnyCPU,“任何CPU 32位首选”,这是新的默认(总体来说,现在有五个选项/平台C#编译器开关:x86,Itanium,x64,anycpu,和anycpu32bit首选)。 当使用AnyCPU的味道时,语义如下:

  • 如果进程在32位Windows系统上运行,则它以32位进程运行。 IL被编译为x86机器码。
  • 如果进程在64位Windows系统上运行,则它以32位进程运行。 IL被编译为x86机器码。
  • 如果进程在ARM Windows系统上运行,则它以32位进程运行。 IL被编译为ARM机器码。

那么,“任何CPU 32位首选”和“x86”之间的差别仅仅是这样的:编译为x86的.NET应用程序将无法在ARM Windows系统上运行,而是“任何CPU 32位首选”应用程序将成功运行。

原因是:如果你不想在64位应用中使用更多的内存。 这意味着,如果您的应用程序是AnyCPU ,则需要以32位运行。

要添加更多,Visual Studio中的设置将针对特定的CLR:

Visual Studio在x86计算机上安装32位版本的CLR,在64位Windows计算机上安装CLR的32位版本和相应的64位版本。 (因为Visual Studio是一个32位应用程序,当它安装在64位系统上时,它将在WOW64下运行。)

请参阅文章64位应用程序 ( MSDN )。