我不清楚编译器在需要时如何自动知道编译为64位。它如何知道什么时候可以自信地定位32位?
我很好奇编译器在编译时如何知道要定位的架构。它是否分析代码并根据它找到的内容做出决定?
答案 0 :(得分:207)
Microsoft有一个博客条目 What AnyCPU Really Means As Of .NET 4.5 and Visual Studio 11 :
在.NET 4.5和Visual Studio 11中,奶酪已被移动。该 大多数.NET项目的默认值都是AnyCPU,但还有更多 现在对AnyCPU来说意味着一个。 AnyCPU还有一个子类型, “任何32位首选的CPU”,这是新的默认值(总体而言,那里 现在是/ platform C#编译器开关的五个选项:x86, Itanium,x64,anycpu和anycpu32bitpreferred)。使用“首选32位”时 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位首选”应用程序将 成功运行。
答案 1 :(得分:2)
答案 2 :(得分:0)
原因是:如果您不想在64位应用程序中使用更多内存。这意味着,如果您的应用程序是 AnyCPU ,您希望以32位运行。
要添加更多内容,Visual Studio中的设置将针对特定的CLR:
Visual Studio在x86计算机上安装32位版本的CLR,在64位Windows计算机上安装32位版本和相应的64位版本的CLR。 (因为Visual Studio是一个32位应用程序,当它安装在64位系统上时,它在WOW64下运行。)
请参阅文章 64-bit Applications (MSDN)。