Performance 提供64位特定版本的软件 我希望通过将我的C++客户端和服务器构建成64位代码,可以看到性能上的提高吗?

Performance 提供64位特定版本的软件 我希望通过将我的C++客户端和服务器构建成64位代码,可以看到性能上的提高吗?,performance,64-bit,Performance,64 Bit,什么样的应用程序从64位特定的构建中受益 我想任何广泛使用long的应用程序都会受益,或者任何需要大量内存(即2Gb以上)的应用程序都会受益,但我不确定还有什么其他好处。真的没有多少其他好处。尽管在某些情况下,作为程序员,编写64位应用程序对您有一些好处。一个简单的例子是一个应用程序,其主要焦点是与注册表交互。作为一个32位进程,您的应用程序将无法访问64位系统上的大量注册表。据您所知,如果您使用大量和/或深循环,则使用64位CPU的额外通用寄存器的好处最大。由于额外的寄存器和新的传递参数约定,

什么样的应用程序从64位特定的构建中受益


我想任何广泛使用long的应用程序都会受益,或者任何需要大量内存(即2Gb以上)的应用程序都会受益,但我不确定还有什么其他好处。

真的没有多少其他好处。尽管在某些情况下,作为程序员,编写64位应用程序对您有一些好处。一个简单的例子是一个应用程序,其主要焦点是与注册表交互。作为一个32位进程,您的应用程序将无法访问64位系统上的大量注册表。

据您所知,如果您使用大量和/或深循环,则使用64位CPU的额外通用寄存器的好处最大。

由于额外的寄存器和新的传递参数约定,您有望获得收益。

(实际上与其他寄存器链接).

在努力弄清楚64位版本是否有技术案例之前,您必须验证是否有商业案例。您的客户是否要求这样的版本?它是否会让您在与其他供应商的竞争中获得决定性的优势?创建这样的版本的成本是多少?将产生什么商业成本通过在您的会计、销售和市场营销流程中添加其他项目来进行重新注册

虽然我认识到,在掌握竞争优势之前,你需要了解绩效改进的潜力,但我强烈建议你从全局的角度来解决问题。如果你是一家小型企业或单独经营的企业,你有义务进行适当的尽职调查。如果你为更大的组织,你的上司会非常感激你在思考这些问题时所做的努力(或者,如果你似乎还没有准备好回答这些问题),你会认为整个问题都是多余的。 综上所述,我的总体技术回应是,绝大多数面向用户的应用程序将看不到64位版本的优势。想想看:当前应用程序中有多少性能问题来自处理器绑定(或RAM访问绑定)?当前应用程序中是否存在性能问题?(如果不是,你可能不应该问这个问题。)

如果是客户端/服务器应用程序,我敢打赌网络延迟对客户端性能的贡献要大得多(特别是当您的查询通常返回大量数据时)。假设这是一个数据库应用程序,您的性能配置文件中有多少是由于服务器上的磁盘延迟时间造成的?如果您考虑影响性能的所有因素,您将更好地了解您的特定应用程序是否会从64位升级中受益,如果是,您是否需要同时升级双方或w您的所有好处都将仅从服务器端升级中获得。

继续@的评论,如果是服务器构建,或者如果您正在向Linux用户分发,64位构建(目前)更有意义

似乎更多的Windows工作站仍然是32位的,而且新版本的客户群可能不多

另一方面,现在许多服务器安装都是64位的:RHEL、Windows、SLES等。我认为,为它们构建将切断许多潜在的使用

桌面Linux用户也可能运行他们最喜欢的发行版的64位版本(最有可能是Ubuntu、SuSE或Fedora)


但是,构建64位的主要明显好处是,您可以绕过3GB的内存使用障碍。

英特尔x64与x86的体系结构优势

  • 更大的地址空间
  • 更丰富的寄存器集
  • 可以链接外部库或加载64位插件
x64模式的架构缺点

  • 所有指针(以及许多指令)占用2倍的内存,在最坏的情况下将有效处理器缓存大小减半
  • 无法链接外部库或加载32位插件
在我编写的应用程序中,我有时会看到大的加速(30%),有时会看到切换到64位时的大的减速(>2倍)。大的加速发生在数字处理/视频处理应用程序中,我被限制在寄存器范围内

在我自己的代码中,当转换到64位时,我看到的唯一一个巨大的减速是来自一个大规模的指针跟踪应用程序,其中一个编译器进行了一些非常糟糕的“优化”。另一个编译器生成的代码的性能差异可以忽略不计

立即移植的好处

一旦你知道要注意什么,编写64位兼容的代码99%的时候都不是那么难。大多数情况下,它归结为在引用内存地址时使用size_t和ptrdiff_t而不是int(我假设这里是C/C++代码)。转换大量未编写为64位感知的代码可能是一件痛苦的事情


即使为应用程序构建64位版本没有意义(可能没有),值得花时间学习如何构建,以便至少所有新代码和将来的重构都能与64位兼容。

好的方面,尽管记住32位代码仍然可以使用WoW64在64位窗口上运行,因此32位软件不排除安装在那些OSON窗口上,默认内存限制是实际上是2GB的pr过程,如果你在.NET领域工作(我不知道非托管代码),实际限制大约是1.5GB,因为框架本身占用了相当大的内存。好的观点@Morten..我在这个问题中没有看到任何特定于操作系统的信息,所以选择了非特定的答案:)和@John-如果在Linux上安装32位libs,同样可以运行32位libs-