.NET在32位或64位系统中有什么区别?

时间:2009-07-08 00:09:56

标签: .net 64-bit operating-system 32-bit

想象一个纯.NET应用程序,它不使用COM组件也不使用PInvoke。目标系统是32位还是64位是否重要?

3 个答案:

答案 0 :(得分:6)

如果应用程序的目标是AnyCPU,则运行时行为将会有所不同,特别是内存使用和限制。

在64位上,不会有相同的32位内存限制(理论上2GB最大内存,但实际上是1.2-1.6)。但是,所有对象引用都是两倍大,因此64位系统将使用更多内存。

此外,64位系统通常还有额外的寄存器等,因此有时性能会略有提高。但这是特定于平台的。

如果应用程序的目标是x86,它将在WoW64下运行,其行为几乎与它在32位系统中的行为方式相同。

答案 1 :(得分:4)

除了Reed Copsey所确定的那些之外,另一种重要的方式是,如果你的“纯”应用程序碰巧使用System.IntPtr结构,或者它使用不安全的代码(这与P / Invoke)和指针算法。

另一个要注意的重要事项是调用System.Runtime.InteropServices.Marshal类中的几乎所有内容。有各种各样的方法可以让你自己在脚下射击(当然,当你需要它时非常有用)。

答案 2 :(得分:4)

假设安全代码没有COM组件,P / Invoke等,应该没有语义差异,但性能可能会受到影响。考虑一下:64位以下的内存越多,但引用越大。赢了一些,输了一些。

无论如何,这里有一些有用的参考资料:

  

“[...]考虑一个.NET应用程序   这是100%类型安全的代码。在这   情景可以带你的   您运行的.NET可执行文件   32位机器并将其移动到   64位系统,让它运行   成功。为什么这样做?   由于组装是100%类型安全   我们知道没有依赖关系   在本机代码或COM对象上   没有“不安全”的代码意味着   应用程序完全运行   在CLR的控制下。 CLR   保证二进制代码   这是由于生成的结果   即时(JIT)编译将是   在32位和64位之间有所不同,   执行的代码都是   语义相同。 [...]“

相关问题