题
在 Linux 上运行需要 1 秒的东西在 AIX 上运行需要 45 秒。我没有直接深入研究该代码,但作为测试,我抓住了一个小型应用程序,该应用程序对另一个 SO 问题几乎没有什么作用:
int main ( int argc, char **argv)
{
int i = 0;
std::vector<int> vec;
vec.push_back(6);
vec.push_back(-17);
vec.push_back(12);
for (i=0;i<100000;i++)
vec.push_back(i);
vec.erase(vec.begin() + 1);
return 0;
}
我有一个旧的编译器(7.0.0.10),我不敢相信代码运行速度比原来的慢多少。g++ 4.2 上的相同代码。
有没有人见过这个?升级编译器需要一些工作。在几乎没有负载的系统上,示例代码大约慢了 20 倍(实时)。
更新所需的盒子规格:
Number Of Processors: 8 Processor Clock Speed: 3504 MHz CPU Type: 64-bit Kernel Type: 64-bit Memory Size: 63232 MB Good Memory Size: 63232 MB Platform Firmware level: EM340_041 Firmware Version: IBM,EM340_041 Console Login: enable Auto Restart: true Full Core: true
AIX 上的输出:
real 0m0.52s
user 0m0.51s
sys 0m0.00s
Linux 上的输出:
0.00s real 0.01s user 0.00s system
解决方案
我怀疑次优的内存分配策略。如果添加会发生什么
vec.reserve(10000);
for循环之前?
其他提示
要么有一些严重的问题你的设置,或者您还没有发布真正的代码。如下因素执行几乎立即在一个很旧的奔腾900Mhz的笔记本电脑内存小的:
#include <iostream>
#include <vector>
#include <ctime>
using namespace std;;
int main ( int argc, char **argv) {
time_t now1 = time(0);
std::vector<int> vec;
vec.push_back(6);
vec.push_back(-17);
vec.push_back(12);
for ( int i = 0; i<10000; i++) {
vec.push_back(i);
}
time_t now2 = time(0);
vec.erase(vec.begin() + 1);
time_t now3 = time(0);
cout << (now2 - now1) << " " << (now3 - now2) << endl;
}
请运行通过两种编译该代码,并报告它输出的数字。
缩小问题范围的一些建议:
- 在程序上使用时间并查看系统/用户时间, 不是 经过的时间。这会给你一个更好的指示。
- 放一个
system("date")
在三个初始push_back 语句中的每一个之前、for 循环之前、擦除之前和返回之前。这将显示哪个操作导致了问题。 - 请告诉我们您正在运行的硬件。您可能有一个 286 级的 pSeries。
然后向我们提供硬数据,我们可以提供更多帮助。
不隶属于 StackOverflow