为什么64位版本的应用程序比32位版本慢得多
Why 64Bit version app is much slower than 32Bit version
为了解决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个客户端连接下完成的。服务器做大量的计算来处理来自客户端的音频数据。
配置你的应用程序,它会告诉你慢代码在哪里。
-
对于"为什么"这个问题,没有细节没有人会知道原因。您必须对分析结果进行分析,如果结果有任何问题,请将其作为问题张贴在此处。
-
如果你的应用不需要超过4GB的内存(在你的情况下是1.5~2.5GB),你应该尝试x32。这是一个新的ABI,允许在64位环境中使用32位指针。
相关文章:
- 将应用程序从32位移植到64位时出现问题
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 浮点数为 32 位和 64 位二进制表示形式
- C++易失性:保证 32 位访问?
- C++将 16 位值转换为 32 位值
- 如何在 64 位平台上计算 32 位哈希C++?
- C++中的24位到32位转换
- 在机器字大小等于 32 位的计算机上int64_t如何工作?
- uint32_t如何保证 32 位?
- 将代码从 32 位迁移到 64 位时出现问题 Visual Studio 2010
- 如何将32位字符与内联assembelyc++中的32位字符进行比较
- 一个32位版本的应用程序,建立在CentOS 6 x64上,当在较新的Linux上启动时,在"dl_itera
- x86 32位对Cuda的支持
- 我把我的编译器从32位转换为64位,但我仍然不能使用超过2GB:(为什么
- 调用64位C/C++DLL的C#应用程序崩溃,但运行32位版本
- 使用带有python绑定的boost在osx上构建32位版本的libtorrent
- 为什么64位版本的应用程序比32位版本慢得多
- Windows:同时构建同一DLL的32位和64位版本