std :: array vs C-array vs std:vector

时间:2014-10-20 11:48:24

标签: arrays c++11 stdarray

我想在我的程序中用std::vector替换std::array,所以我继续测试:

template<typename T> class A{
    public:
    void sub_run(T w){
        w[0] = 0.5;
        w[1] = 1.5;
        w[2] = 2.5;
        w[3] = 0.0;

        for (int i = 0; i < 100000000; i++)
        {
            w[0] = i *0.5;
            w[1] = i *1.5;
            w[2] = i *2.5;

            w[3] = w[0] + w[1]*w[2];
        }
    }
};

int main(){

    // Vectors    
    /*
    A<vector<double> > inst_a;
    vector<double> w(4);
    inst_a.sub_run(w);
    */
    // 1.71 sec

    // C-array
    /*
    A<double *> inst_a;
    double w[4];
    inst_a.sub_run(w);
    */
    // 1.03 sec

    // std::array

    A<array<double,4> > inst_a;
    array<double,4> w;
    inst_a.sub_run(w);

    // 3.31 sec

    return 0;
 }

嗯,输出很奇怪 - std::array比C阵列慢3倍甚至比vector慢。没有应用优化,唯一的标志是-std=c++11。 可能有什么不对?

1 个答案:

答案 0 :(得分:3)

来自GCC documentation about Optimization

  

没有任何优化选项,编译器的目标是减少   编译成本和使调试产生预期的   结果。陈述是独立的:如果你用a停止程序   语句之间的断点,然后您可以为任何分配新值   变量或将程序计数器更改为中的任何其他语句   函数并获得您希望从源代码中获得的结果。

如果没有-O选项,GCC不关心性能。它关心使用gdb或其他类似工具进行调试。要实际编译尽可能快地运行的程序,您应该使用-O选项。例如,-O2