227

在此处输入图像描述

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

我主要对编译器如何知道编译时要针对哪个架构感到好奇。它会分析代码并根据发现的内容做出决定吗?

4

3 回答 3

236

Microsoft 有一篇博客文章What AnyCPU 对 .NET 4.5 和 Visual Studio 11 的真正意义

在 .NET 4.5 和 Visual Studio 11 中,奶酪已被移动。大多数 .NET 项目的默认值还是 AnyCPU,但现在 AnyCPU 的含义不止一种。AnyCPU 有一个额外的子类型,“Any CPU 32-bit Preferred”,这是新的默认值(总体而言,现在 /platform C# 编译器开关有五个选项:x86、Itanium、x64、anycpu 和 anycpu32bitpreferred )。当使用 AnyCPU 的“Prefer 32-Bit”风格时,语义如下:

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

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

于 2012-08-22T05:36:20.870 回答
17

这是一个简单的答案:

应用拱门。

注意: AnyCPU-32bitPreferred 仅在 .Net 4.5 及更高版本中可用。

于 2019-11-23T18:37:38.467 回答
-1

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

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

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

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

于 2012-08-22T05:23:57.187 回答