【问题标题】:Is there any big advantages of having its C++ developing applications running on a 64 bit mode?让其 C++ 开发应用程序在 64 位模式下运行有什么大的优势吗?
【发布时间】:2012-01-08 11:00:36
【问题描述】:

我刚刚注意到,像chrome这样的著名应用程序至少在windows下没有任何64个版本。

在我的公司中,我编写的应用程序在 64 位版本的 windows 下以 32 位模式运行。

我想知道在 64 位模式而不是 32 位模式下构建应用程序是否可以获得一些优势/性能提升

编辑:

一般情况下,在哪种软件中,寄存器数量的增加会受益?

【问题讨论】:

  • 64 位版本的 Windows 附带 32 位和 64 位版本的 Internet Explorer,但 32 位版本是默认版本,因为很多 IE 插件都是 32 位的并且不会在 64 位进程空间中加载。可能出于同样的原因,Chrome 是 32 位的。
  • 如果您有 32 位代码库,请开始使用 64 位代码。一些现有的数据处理将有很大的好处,但对与处理器相关的内部结构来说却没有那么大的好处,因为协调/逻辑本身的大小几乎会增加一倍,并且会在一定程度上消除假定的性能增益。但摆脱兼容层已经足够重要了。

标签: c++ windows 64-bit


【解决方案1】:

64 (x86_64) 位现在是主流。 两大优势:

  • 无需任何技巧即可获得更多内存
  • 更多通用和附加处理器寄存器

但你也有小缺点:

  • 更多的内存消耗(通常比 32 位大 20-30%)

我认为 Google Chrome 在 Windows 中以 32 位模式运行,因为有太多 32 位插件(如 Flash)。还有 64 位的 linux 版本。

修改其他问题

如果您的应用程序使用数学(64 位整数运算)、编码/编码/打包/解包、密码学,通常您会受益。

另请参阅 IBM 64 位计算决策者指南 http://www.onitecservice.com.br/produtos/arquiv_pdf/nocona64bit_onitec_service.pdf

哪些类型的应用程序将利用从 32 位到 64 位计算的转换?

按照从最大到最小的好处排列,这些类型是:

  • I/O 密集型 — 任何从设备获取数据所花费时间比 处理它:数据库后端、电子商务、CRM、ERP、SAP、SAS、各种关键业务和垂直应用程序,以及任何其他需要大量内存的应用程序。在 一般来说,这些应用程序应该会从 64 位看到显着的性能改进 硬件、操作系统和设备驱动程序,以及消除内存 覆盖层和其他性能抑制剂。
  • 计算密集型 — 高性能计算 (HPC) 和科学/技术 计算,包括生命科学、地球物理研究;高端图形渲染; 流视频,以及任何其他花费更多时间处理数据而不是检索数据的应用程序。
  • 网关/安全基础设施 — SSL 服务器、目录服务、互联网缓存和 数据库前端。这些应用程序可能会从交换机中受益。你应该 联系各个软件供应商以了解他们利用 64 位功能的计划。
  • 标准基础设施——这类人通常不会从 64 位计算中获得什么好处。应用程序包括文件和打印服务器、低容量/非关键业务应用程序以及不太可能重写为 64 位的遗留应用程序。

【讨论】:

  • 20-30% 似乎很大,很难相信平均水平。你有这方面的资料吗?
  • 即使 20-30% 的数字是真实的,64 位机器通常具有比 32 位机器更多的内存。毕竟,拥有 64 位处理器的全部原因是您可以处理超过 4 GB 的 RAM。构建只有 4 GB RAM 的 64 位计算机的人完全没有抓住重点。
  • @bames53:考虑到指针在 64 位应用程序中的大小通常甚至是 32 位应用程序的两倍,这是相当可信的,尽管我从未检查过自己.
  • @bames53 不 - 我没有良好的公共链接。我想你也可以google一下。这是我们之前从 32 位迁移到 64 位的内部经验(我们有 C++ 和 Java 服务器应用程序)。当然,这取决于您的应用程序,但有时我们的内存消耗会增加多达 40%。
  • @bames53:对不起。我并不是想让您认为 only 指针会增加大小。其他一些类型可以也增加大小。此外,我认为你在这里有一个根本的误解。内存使用量增加 20-30%意味着根本没有 20-30%减速
【解决方案2】:

如果您有可能为 64 位目标进行编译,您应该这样做(恕我直言)。您可以尝试分析您的应用程序以查看是否存在实际需求(内存消耗限制等) - 但我喜欢在滚动运行进程时在我的应用程序管理工具中看到“64 位”标记。

64 位模式应用程序有几个优点,主要原因是可用内存更多。如果您的编译器正确处理编译并相应地优化代码,您应该能够获得一些额外的性能。

尝试进行“真实世界”测试 - 编译 64 位和 32 位,并绘制一些性能图表。我在一个应用程序上执行此操作,它显示出约 20% 的性能提升(更快的计算),并且程序可以加载的数据量突然看起来“无限”。

(我对 Chrome 的最佳猜测是它们依赖于某些仅在 32 位中运行的第三方库,或者可能使用某些仅 32 位的 Windows API。)

【讨论】:

  • 这如何回答这个问题,即我想知道在 64 位模式下构建应用程序是否有一些优势/性能提升
  • 我不得不同意某人的观点——你没有提到任何优点,你只是说应该编译为 64 位,没有任何指导或理由。
  • @justsomebody - 你是对的 - 我主要关注“为什么 Chrome 不运行 64 位”部分。编辑以更好地回答真正的问题。
【解决方案3】:

随便扫了http://en.wikipedia.org/wiki/64-bit 有利有弊,有关详细信息,请查看该维基百科页面。 如上所述,64 位版本的应用程序的主要优势是能够访问 x86-64 架构中的更多寄存器。

同样提供该页面,没有迹象表明开箱即用有任何显着的性能提升。您必须调整您的应用程序以利用它提供的功能,即更多的寄存器和更多的内存,因为相同的数据占用更多的内存空间(由于更长的指针和可能的其他类型,以及对齐填充)。

根据 W/P,更多的内存使用可能也是主要缺点。简而言之,可能会有性能提升,但您的程序需要稍作更改才能利用它。我建议在这两种架构上对您的程序进行基准测试,看看它是否会立即产生影响(尽可能不改变任何东西)。

【讨论】:

    猜你喜欢
    • 2010-10-22
    • 2010-10-08
    • 1970-01-01
    • 2012-11-23
    • 2021-12-19
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多