1

在 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 倍(实时)。

更新要求的盒子规格:

    处理器数量:8
    处理器时钟速度:3504 MHz
    CPU 类型:64 位
    内核类型:64位
    内存大小:63232 MB
    良好的内存大小:63232 MB
    平台固件级别:EM340_041
    固件版本:IBM,EM340_041
    控制台登录:启用
    自动重启:真
    全核心:真

AIX 上的输出:

real    0m0.52s
user    0m0.51s
sys     0m0.00s

Linux 上的输出:

 0.00s real     0.01s user     0.00s system
4

3 回答 3

1

要么你的设置有严重问题,要么你没有发布真正的代码。在一台非常旧的 900Mhz Pentium 笔记本电脑上几乎可以立即执行以下操作,而且内存很少:

#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;
}

请通过两个编译器运行此代码并报告它输出的数字。

于 2009-05-21T07:47:49.823 回答
0

一些缩小问题范围的建议:

  • 在您的程序上使用时间并查看系统/用户时间,而不是经过的时间。这会给你一个更好的指示。
  • system("date")在三个初始 push_back 语句之前、for 循环之前、擦除之前和返回之前放置一个。这将显示导致问题的操作。
  • 告诉我们您也在运行什么硬件。您可能有一个 286 级的 pSeries。

然后将硬数据返回给我们,我们可以提供更多帮助。

于 2009-05-21T05:58:25.093 回答
0

我怀疑一个次优的内存分配策略。如果添加会发生什么

vec.reserve(10000);

在for循环之前?

于 2009-05-21T06:47:52.077 回答