如何编译我的64位应用程序使其更快或更好?
我使用C#,.NET,VS.NET 2008。
除了能够处理更多内存外,将我的应用程序编译为64位有什么好处?
会更快还是更小? 为什么?
它是否使它与x64系统更兼容(与32位应用程序相比)?
对于本机应用程序,您可以获得诸如增加地址空间等诸多好处。 但是,.NET应用程序在CLR上运行,它抽象出任何底层架构差异。
假设您只是处理托管代码,那么定位特定平台没有任何好处; 你最好只使用“anycpu”标志集进行编译(默认情况下是打开的)。 这将生成平台无关的程序集,这些程序集将在运行CLR的任何体系结构上运行良好。
专门针对(比方说)x64不会给你带来任何性能提升,并且会阻止你的程序集在32位平台上运行。
本文提供了有关该主题的更多信息。
更新: Scott Hanselman刚刚也对这个主题做了很好的概述 。
从理论上讲,为x64编译的程序运行速度比为x86编译的程序运行得快。 这是因为x64架构中有更多通用寄存器。 32位x86只有4个通用寄存器。 AMD在其x64扩展中增加了8个通用寄存器。 这允许更少的内存负载和(略微)更快的性能。
实际上,这并没有在性能上产生巨大的差异,但它应该略微改变。
二进制文件的大小和内存占用量将比使用64位指令略有增加,但由于x64仍然是CISC架构,因此二进制大小不会像RISC架构那样加倍。 大多数指令的长度仍然短于64位。
事实上,不需要大内存空间的64位应用程序往往工作得更慢。 其背后的原因之一是您必须移动移动数据。 如果你不能利用> 2GB的内存空间(例如用于缓存),我不推荐它。
这是一个有趣的链接,我刚刚找到http://www.osnews.com/story/5768 ,有很多信息。
我怀疑它(给定C#/。NET平台),除非你使用的是Native Code。 请记住,.NET托管代码编译为IL,平台交换机默认为anycpu,因此您应该使用现有二进制文件在64位操作系统上获得更好的性能:
http://blogs.msdn.com/gauravseth/archive/2006/03/07/545104.aspx
本文提供了大量有用的信息,包括CorFlags工具,它可以让您检查PE头。
通常,对于本机代码二进制文件,是的。
我真的不是CPU架构方面的专家,所以请轻轻一点。 维基百科有一篇描述x86-64架构( 链接文本 )的文章。
x86-64有更多的寄存器,仅这一点就可以帮助提高程序的速度。 此外,这种新架构还提供了新的指令集,如果编译器利用它,可以提高速度。
另一个需要考虑的因素是可用的指令集数量。 当程序编译为x86时,它的目标是运行所有现有的32位CPUS(Pentium 1,2,3,4,core *等)。 每个新的CPU生成都添加了新的指令集,这个指令不能被希望在所有x86 CPUS中以二进制格式完全移植的程序使用。 由于x86-64位是一种新架构,因此重新编译该机器的程序可为编译器提供更广泛的指令集,而无需过多担心diff 64位CPUS之间的二进制兼容性。