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

时间:2011-11-30 19:21:57

标签: c++ performance ubuntu 32bit-64bit

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

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

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

我用谷歌搜索,有些人说,不必要的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更改为int s,但结果仍然相同。

请告知。

彼得

编辑:

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

2 个答案:

答案 0 :(得分:4)

配置您的应用。这将告诉你慢速代码的位置。

答案 1 :(得分:2)

  1. 对于“为什么”的问题,没有细节,没有人会知道原因。您必须分析分析结果,如果结果有任何问题,请在此处将其作为问题发布。

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