我希望通过将我的本机C ++客户端和服务器构建为64位代码来获得性能提升吗?
具有64位特定构建的哪种应用程序受益?
我认为任何广泛使用long的东西都会受益,或者任何需要大量内存(即超过2Gb)的应用程序,但我不确定还有什么。
答案 0 :(得分:17)
英特尔x64与x86的架构优势
x64模式的架构缺点
在我写过的应用程序中,我有时会看到大幅加速(30%),有时在切换到64位时会出现大幅减速(> 2x)。在我注册的数字运算/视频处理应用程序中发生了很大的加速。
在转换为64位时,我在自己的代码中看到的唯一大幅减速来自于一个大规模的指针追逐应用程序,其中一个编译器做了一些非常糟糕的“优化”。另一个编译器生成的代码中性能差异可以忽略不计。
立即移植的好处
一旦你知道要注意什么,编写64位兼容代码并不是那么困难的99%。大多数情况下,归结为在引用内存地址时使用size_t和ptrdiff_t而不是int(我在这里假设C / C ++代码)。将大量未编写的代码转换为64位感知可能会很痛苦。
即使为您的应用程序进行64位构建没有意义(它可能没有),但是值得花时间学习构建所需的内容以便至少所有新代码未来的重构将与64位兼容。
答案 1 :(得分:5)
在努力确定是否存在64位版本的技术案例之前,您必须验证是否存在业务案例。您的客户是否要求进行此类构建?它会在与其他供应商的竞争中给你一个明确的支持吗?创建此类构建的成本是多少,以及通过在会计,销售和营销流程中添加其他项目会产生哪些业务成本?
虽然我认识到您需要了解性能改进的潜力,然后才能掌握竞争优势,但我强烈建议您从全局角度处理问题。如果您是小型企业或独立企业,您应该自己做适当的尽职调查。如果你为一个更大的组织工作,那么你的上级会非常感谢你在思考这些问题时付出的努力(或者如果你似乎没有准备好回答这些问题,那么整个问题就会非常过分。)
总而言之,我的整体技术响应将是绝大多数面向用户的应用程序将看不到64位版本的优势。想一想:当前应用程序中有多少性能问题来自处理器限制(或RAM访问限制)? 当前应用中是否存在性能问题? (如果没有,你可能不应该问这个问题。)
如果它是一个客户端/服务器应用程序,我的赌注是网络延迟对客户端的性能贡献更大(特别是如果您的查询通常会返回大量数据)。假设这是一个数据库应用程序,您的性能配置文件有多少是由于服务器上的磁盘延迟时间造成的?如果您考虑影响性能的整个因素,您将更好地处理您的特定应用程序是否会受益于64位升级,如果是,您是否需要升级双方或是否所有好处只来自服务器端升级。
答案 2 :(得分:1)
没有其他的,真的。虽然编写64位应用程序可能会对您有所帮助,但在某些情况下,作为程序员。一个简单的例子是一个主要关注与注册表交互的应用程序。作为一个32位进程,您的应用程序将无法访问64位系统上的大型注册表。
答案 3 :(得分:1)
继续@ mdbritt的评论,如果它是服务器构建,或者你正在向Linux用户分发,那么构建64位会更有意义[当前]。
似乎更多Windows工作站仍然是32位,并且可能没有庞大的客户群来构建新版本。
另一方面,许多服务器安装现在都是64位:RHEL,Windows,SLES等。 不 为他们构建将会切断很多在我看来,潜在用途。
桌面Linux用户也可能正在运行他们喜爱的发行版的64位版本(很可能是Ubuntu,SuSE或Fedora)。
然而,为64位构建构建的主要明显好处是,您可以在内存使用方面获得3GB的屏障。
答案 4 :(得分:0)
根据this web page,如果使用大量和/或深度循环,那么从64位CPU的额外通用寄存器中获益最多。
答案 5 :(得分:0)
由于附加寄存器和新的传递参数约定(实际上与附加寄存器相关联),您可以获得增益。