为什么64位版本的应用程序比32位版本慢得多

Why 64Bit version app is much slower than 32Bit version

本文关键字:版本 32位 应用程序 64位 为什么      更新时间:2023-10-16

为了解决3G (Ubuntu)内存问题(有时我们确实需要比3G更多的内存),我在64位环境下编译了我的应用程序,以使用更多的内存。

但是,我的64位应用程序比32位版本慢得多。

32位版本构建在32位机器上;64位版本构建在64位机器上;在我们的加载测试中,32位和64位版本都运行在64位机器上。

我搜索了一下,一些人说,不必要的long类型会使64位比32位慢,因为:

man g++:
   -m64
       Generate code for a 32-bit or 64-bit environment.  The 32-bit environment
       sets int, long and pointer to 32 bits and generates code that runs on any
       i386 system. The 64-bit environment sets int to 32 bits and long and
       pointer to 64 bits and generates code for AMD's x86-64 architecture. For
       darwin only the -m64 option turns off the -fno-pic and -mdynamic-no-pic
       options.

所以我把所有的long s都换成了int s,但结果还是一样的

请建议。彼得

编辑:

  • 关于内存,32和64版本使用的内存差不多,大约1.5 ~2.5 GB,我的机器有9GB物理内存;
  • 我使用OProfile进行配置,对于大多数功能,64位版本收集比32位版本更多的分析样本;
  • 我想不出任何一个其他瓶颈,请告知。
  • 我的应用是一个服务器,加载测试是在100个客户端连接下完成的。服务器做大量的计算来处理来自客户端的音频数据。

配置你的应用程序,它会告诉你慢代码在哪里。

  1. 对于"为什么"这个问题,没有细节没有人会知道原因。您必须对分析结果进行分析,如果结果有任何问题,请将其作为问题张贴在此处。

  2. 如果你的应用不需要超过4GB的内存(在你的情况下是1.5~2.5GB),你应该尝试x32。这是一个新的ABI,允许在64位环境中使用32位指针。