C ++ Vector似乎比C Array(Time)更快。为什么?

时间:2016-10-23 11:21:48

标签: xcode performance debugging memory vector

您好我见过C++ Vector vs Array (Time)。 在我的Mac上,向量需要定义时间,但在比较之后给出了胜利者的向量。 这个怎么运作 ? 我说int []比动态矢量更快?

#include <iostream>
#include <vector>
using namespace std;
#define N (100000000)
//int sd[N];
int main() {
    clock_t start;
    double temps;
    static int sd[N];
    start = clock();
    for (unsigned long i=0 ; i < N ; i++){
        if(sd[i]==3)
            ;
    }
    temps = (clock() - start) / (double)(CLOCKS_PER_SEC / 1000);
    printf("Time: %f ms\n",temps);
    vector<int>vd(N);
    start = clock();
    for (unsigned long i=0 ; i < N ; i++){
        if(vd[i]==3)
            ;
    }
    temps = (clock() - start) / (double)(CLOCKS_PER_SEC / 1000);
    printf("Time: %f ms\n",temps);
    while (1)
        ;
    return 0;
}

我有这些结果:

  • 时间:422.87400毫秒
  • 时间:300.84700毫秒
    即使它以矢量开头,矢量看起来也比c阵列快。

感谢您的解释。

另一个问题:在xcode中,为什么我看到了解析向量和静态c数组所使用的内存,我必须像代码一样去所有的内存单元格(for ... if(sd [i] ...)< / p>

感谢您的解释。

1 个答案:

答案 0 :(得分:0)

我已经重新确定,如果我将所有c数组单元初始化为0(例如或6 ......),则c数组将更快或相等。

int main() {
    clock_t start;
    double temps;
    static int sd[N];
    for (unsigned long i=0 ; i < N ; i++){
        sd[i]=0;
    }

    start = clock();
    //puts("initialized");
    for (unsigned long i=0 ; i < N ; i++){
        if(sd[i]==3)
            ;
    }
    temps = (clock() - start) / (double)(CLOCKS_PER_SEC / 1000);
    printf("Time: %f ms\n",temps);
    //puts("initialized");
    vector<int>vd(N);
    start = clock();
    for (unsigned long i=0 ; i < N ; i++){
        if(vd[i]==3)
            ;
    }
    temps = (clock() - start) / (double)(CLOCKS_PER_SEC / 1000);
    printf("Time: %f ms\n",temps);

    while (1)
        ;
    return 0;
}

我将看到xcode中使用的内存,所有单元格c数组的初始化为0。
那么另一个问题是,为什么在这种情况下(或一般情况下)初始化时更快?

相关问题