有没有真正的点将Windows应用程序编译为64位?

时间:2010-02-25 13:10:58

标签: c++ windows 64-bit

我自信地说,我们编写的99%的应用程序不需要处理超过2Gb的内存。当然,运行64位的 OS 有很多明显的好处可以解决更多的RAM问题,但有没有特殊原因可以将典型的应用程序编译为64位?

12 个答案:

答案 0 :(得分:19)

64位可能会带来性能改进。一个很好的例子是函数调用中的一些参数是通过寄存器传递的(在栈上推送的东西较少)。

修改 当我研究使用64位构建和32位构建运行产品的一些差异时,我查看了一些旧笔记。我在四核64位机器上运行测试。因此,存在将苹果与橙子进行比较的问题,因为32位显然在仿真模式下运行。但是,似乎很多我读过的内容such as this, for example,一直都说WOW64的速度并不重要。但即使该声明不正确,您的应用程序几乎肯定会在64位操作系统上运行。因此,在64位计算机上对32位版本与64位版本进行比较具有价值。

在我执行的测试中(当然不全面),我没有发现任何32位版本更快的情况。但是,当运行64位版本时,我运行的许多SQL密集型操作(高CPU和高I / O)的速度提高了20%到50%。这些测试涉及一些相当“丑陋”的SQL语句以及一些具有高并发性的TPCC测试。当然,很大程度上取决于编译器开关,所以你需要做自己的测试。

答案 1 :(得分:14)

现在将它们构建为64位,即使您从未发布过构建版本,也可以帮助您查找和修复以后在强制构建和发布为64位时遇到的问题。

答案 2 :(得分:10)

x64有8个通用寄存器,在运行32位代码时不可用。这是三倍的数量(如果将ESI,EDI,EBP和ESP视为通用目标,则为两倍);我不这样做。这可以在使用四个以上变量的函数中节省大量的加载和存储。

答案 3 :(得分:9)

不要低估提供产品的原生64位版本的营销价值。

此外,您可能会对有多少人处理需要尽可能多内存的应用感到惊讶。

答案 4 :(得分:6)

我只会说,只要你需要2GB以上的话就可以了。

有一点是64位编译意味着(显然)64位指针。这意味着代码和数据结构变得更大,意味着应用程序。将从缓存中受益少一点,并且会更频繁地击中虚拟内存等。

所以,如果你不需要它,基本的效果就是让你的应用程序慢慢变得更加膨胀。

那就是说,随着时间的推移,你会更关心64位,因为这就是所有工具和库等都会被写入的。即使你的应用程序可以在64K中幸福地生活,你也不太可能使用16位代码 - 这些增益并不重要(无论如何它都是一个小的快速应用程序)并且肯定被所涉及的麻烦所抵消。到时候,我们会以同样的方式看到32位。

答案 5 :(得分:5)

您可以将其视为面向未来的。它可能还有很长的路要走,但考虑到未来几年,64位操作系统和CPU无处不在(考虑当32位接管时16位消失)。如果您的应用程序是32位且所有竞争对手已经转移到64位,那么您的应用程序可能会被视为(或被竞争对手指责为)过时,较慢或无法更改。也许甚至有一天对32位应用程序的支持将被删除或不完整(Windows 7能否正确运行16位应用程序?)。如果您现在已经构建了64位版本的应用程序,则可以避免这些问题。如果你把它推迟到以后,你可能会在现在和你移植之间编写更多的代码,那么你的端口会更难。

对于很多应用程序而言,没有太多令人信服的技术原因,但如果这很容易,现在移植可能会为您节省更多的时间。

答案 6 :(得分:1)

如果您不需要扩展地址空间,则以64位模式提供任何功能都不会产生任何缺点,例如增加内存消耗和缓存压力等。

虽然我们提供64位版本,但我们的客户正在推动我们减少内存消耗,以便他们获得这些优势。

答案 7 :(得分:1)

所有可能需要大量内存的应用程序:想要在内存中缓存大量数据的数据库服务器,处理大量数据的科学应用程序,......

答案 8 :(得分:1)

我最近阅读了这篇文章 Optimizing software in C++ 。在章节2.3 Choice of operating system中,对64和32位系统的优势和劣势进行了比较,并对Windows进行了一些具体的观察。

Mark Wilkins已经在这篇帖子中提到过更多关于函数调用的寄存器。 64位系统的另一个有趣特性是:

The SSE2 instruction set is supported on all 64-bit CPUs and operating systems.

SSE2指令可以提供出色的优化,并且它们正在被越来越多地使用,因此在我看来这是一个值得注意的功能。

答案 9 :(得分:0)

Fastcall 通过将前四个参数保存在寄存器中,使调用子程序更快。

答案 10 :(得分:0)

如果你说99%的应用程序不会从64位中受益,那对你个人来说可能就是这样,但白天我使用Visual Studio和Xcode来编译具有大代码库的C ++,搜索多个-Gb存储库,包含Google桌面和Spotlight。然后我回家用一个使用几个Gb声音库的音序器写音乐,并在我的20Gb照片上做一些photoshopping,也许用假日剪辑做一些视频编辑。

所以对我来说(我敢说很多其他用户),拥有这些应用程序的64位版本将是一个很大的优势。文字处理器,网络浏览器,电子邮件客户端:也许不是但任何与大媒体有关的事情都会受益。

答案 11 :(得分:-3)

每个时钟周期可以处理更多数据,这可以提高性能,例如加密,视频编码等应用