众所周知,Delphi 64 位即将到来(至少每个 Delphi 程序员)。除了 codegear 所说的 64 位 Delphi 应用程序的好处(codegear 没有说太多)之外,拥有 64 位 Delphi 应用程序会给我带来什么好处? Codegear 发布后立即将我的应用程序移植到 64 位真的是个好主意吗?
EDIT:
我只是问这个问题,因为我想要我能得到的所有意见。现在,我可以说我确实需要更多可用内存供我的应用程序使用,因为它消耗了大量资源。如果可能的话,我真的可以使用更快的速度。我不需要 shell 扩展,也不需要插件。
我的客户也在询问我的应用程序的 x64 版本,但我真的不明白他们为什么要求它,因为他们实际上是律师,不知道什么是 64 位应用程序。
EDIT
实际上我并没有直接参与应用程序的开发。我是技术团队的一员,我创建的东西供我工作的公司中的其他开发人员用来真正开发最终的应用程序。所以,我的工作是做技术工作,将应用程序移植到 x64 就是我所做的事情,但我需要向我的上级解释为什么我要这样做。
与针对 32 位 (x86) 编译的相同程序相比,64 位程序具有以下优点:
更多寄存器。64位x86芯片有还有几个寄存器 http://en.wikipedia.org/wiki/X86-64理论上(如果编译器利用的话)在某些情况下这可以产生更快的代码。
更多内存。对于 32 位程序,如果使用以下命令进行编译,则通常会限制为 2GB 地址空间或总共 4GB 地址空间/LARGEADDRESSAWARE
,由于 Windows 的内核/用户空间分割,实际上约为 3.5GB。 64 位进程可以处理更多的事情。仅当您的应用程序需要大量内存时这才重要。
能够为 64 位程序构建插件,就像资源管理器一样。除非您将 COM 用于对数据进行编组的插件,否则您无法在 Windows 的一个进程中混合使用 32 位和 64 位代码,例如加载 32 位 DLL 的 64 位 EXE。例如,如果您想编写一个 Explorer 插件,则无法让它与旧版本的 Delphi 一起使用 64 位版本的 Explorer。您可以使用 64 位版本。
德尔福特定:编译器将使用SSE/SSE2 https://stackoverflow.com/questions/4064189/floating-point-support-in-64-bit-compiler指示对于浮点计算,当前的 32 位编译器仅使用 x87 FPU 指令(我认为)。这应该会提高浮点数学的速度。您可能甚至不会注意到,除非您的应用程序高度依赖于 FP(可能是游戏,或者数据处理应用程序之类的东西。)
您的问题“我会从 64 位 Delphi 应用程序中受益吗?”的答案是高度依赖于您的具体应用。一般来说,除了可能的小幅速度增加之外,不太可能有太大的好处。不过,不要依赖 64 位来加速缓慢的应用程序:您仍然需要进行算法更改才能大幅提升速度。 64 位并不是灵丹妙药。除此之外,只有当您已经遇到 32 位施加的限制之一时,您才需要进行更改 - 我怀疑您还没有遇到,否则您就不会问这个问题。
如果您决定转换,您可能会发现这个线程 https://stackoverflow.com/questions/4051603/how-should-i-prepare-my-32-bit-delphi-programs-for-an-eventual-64-bit-compiler很有用。
但另一件事是:即使您不需要更改,您也可能想要更改,尤其是当您的应用程序是个人项目时。您可能会学到一些东西,当您修复 32/64 位问题时,您的代码质量将会更高,而且这样的项目会很有趣。毕竟你是一名程序员:)
Edit:我看到你已经更新了你的问题“我可以说,我确实需要更多可用内存供我的应用程序使用,因为它消耗了大量资源。如果可能的话,我真的可以使用更高的速度。”
什么资源?记忆? 64 位将为您提供更大的可寻址地址空间,仅此而已。如果这些算作资源的话,它不会给你更多的 GDI 句柄等。但是,如果您确实需要更多内存,那么 64 位值得转换为。
“更快的速度”,如果你想要big差异,更有可能通过算法或线程更改而不是通过 64 位编译器来实现。
“我的客户也在询问我的应用程序的 x64 版本,但我真的不明白他们为什么要求它,因为他们实际上是律师,不知道什么是 64 位应用程序。”他们很可能听说 64 位更好或更快。在理想的世界中,客户会有基于现实的需求,但情况并非总是如此。务实地说,如果客户想要这样的东西,可能值得转换,仅仅因为这让他们高兴:高兴的客户是好的,他们可能会为新版本付钱给你,这可能有助于提高你公司的口碑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)