通过将我的本机C++客户端和服务器构建为64位代码,我是否期望获得任何性能提升?
具有64位特定构建会使哪些应用程序受益?
我想象任何可以大量使用long的东西都会受益,或者任何需要大量内存(即超过2Gb)的应用程序,但我不确定还有什么.
英特尔x64与x86的架构优势
更大的地址空间
更丰富的寄存器组
可以链接外部库或加载64位的插件
x64模式的架构缺点
所有指针(以及许多指令)占用内存的2倍,在最坏的情况下将有效处理器高速缓存大小减半
无法链接外部库或加载32位插件
在我编写的应用程序中,我有时会看到大幅加速(30%),有时在切换到64位时会出现大幅减速(> 2x).在我注册的数字运算/视频处理应用程序中发生了很大的加速.
转换为64位时,我在自己的代码中看到的唯一一个大缓慢来自于一个大规模的指针追逐应用程序,其中一个编译器做了一些非常糟糕的"优化".另一个编译器生成的代码中性能差异可以忽略不计.
现在移植的好处
编写64位兼容的代码不是的时候,硬99%,一旦你知道要注意什么.大多数情况下,把它归结为引用的内存地址时(我假设这里的C/C++代码)使用,而不是为int的size_t和ptrdiff_t的.将大量未编写的代码转换为64位感知可能会很痛苦.
即使它没有任何意义,使64位编译你的应用程序(它可能没有),这是值得花时间去学习怎样才能使构建这样至少所有的新代码和未来的重构将是64位兼容的.
在努力确定64位版本是否存在技术案例之前,必须验证是否存在业务案例。您的客户要求这种构造吗?它将使您在与其他供应商的竞争中获得明确的立足点吗?创建这样一个版本的成本是多少?通过在您的会计,销售和市场营销流程中添加其他项目会产生什么业务成本?
虽然我认识到您需要了解性能改进的潜力,然后才能掌握竞争优势,但我强烈建议您从全局角度解决问题。如果您是小型企业或单独企业,则应自己做适当的尽职调查。如果您在一个较大的组织中工作,那么您的上司将非常感谢您为思考这些问题而付出的努力(或者,如果您似乎不准备回答这些问题,则将整个问题视为令人讨厌的事情)。
综上所述,我的总体技术回应是,绝大多数面向用户的应用程序都不会从64位版本中受益。考虑一下:您当前的应用程序中有多少性能问题是由处理器约束(或RAM访问约束)引起的?是否有性能问题,在当前的应用程序?(否则,您可能不应该问这个问题。)
如果它是一个客户端/服务器应用程序,那么我敢打赌,网络延迟对客户端性能的影响要大得多(尤其是在您的查询通常返回大量数据的情况下)。假设这是一个数据库应用程序,那么多少性能配置文件是由于服务器上的磁盘延迟时间导致的?如果考虑影响性能的整个因素,则可以更好地了解您的特定应用是否可以从64位升级中受益,如果需要,则可以同时升级双方还是全部升级好处将仅来自服务器端升级。