在Linux上运行需要1秒才需要45秒才能在AIX上运行。我没有直接挖到那个代码,但是作为一个测试抓住了一个小应用程序,它在另一个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倍(实时)。
更新Reqested Box规格:
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
答案 0 :(得分:1)
您的设置存在严重问题,或者您尚未发布真实代码。以下内容几乎立即在一台非常老旧的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;
}
请通过两个编译器运行此代码并报告它输出的数字。
答案 1 :(得分:0)
提出一些缩小问题范围的建议:
system("date")
。这将显示导致问题的操作。然后使用硬数据回复我们,我们可以提供更多帮助。
答案 2 :(得分:0)
我怀疑内存分配策略不是很理想。如果添加
会发生什么vec.reserve(10000);
在for-loop之前?