【发布时间】:2012-09-26 13:02:27
【问题描述】:
我的理解是 .NET 应用程序是独立于平台的,因此纯 .NET 代码应该在 x86 或 64 位机器上运行。除非您的 .NET 代码调用一些本机代码,否则它是平台相关的。这是真的吗?
【问题讨论】:
-
并非如此,每个 .NET 应用程序都运行大量本机代码。并且有很多本机代码在这两种风格中都可用。操作系统就是最好的例子。其次是CLR和jitter。
我的理解是 .NET 应用程序是独立于平台的,因此纯 .NET 代码应该在 x86 或 64 位机器上运行。除非您的 .NET 代码调用一些本机代码,否则它是平台相关的。这是真的吗?
【问题讨论】:
.NET 应用程序可以编译为面向 x86、x64 或“两者”。通常,如果您依赖的 COM 控件不适用于其他平台等,您将只针对一个平台。
【讨论】:
您的代码可以编译为完全独立于平台,或者您可以针对特定平台。标准建议是让库与体系结构无关(即“任何 CPU”)并针对可执行文件以 x86 为目标。 Visual Studio 2010 默认使用这种方法的原因在这里解释:AnyCPU executables are usually more trouble than they're worth:
- 以两种截然不同的模式(x64 和 x86)运行会增加产品复杂性和测试成本。
- 无论如何,32 位往往(有点)更快。
- 某些功能在 x64 中不可用。
- 如果超过 4 GB 的地址空间有用,正确的做法是仅 x64 并避免支持两个平台的成本。
当然,如果您只针对 x86,那么您的代码仍然可以通过WoW64 在 x64 上运行。
【讨论】: