0

我想在我的程序中替换std::vectorstd::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-array 慢 3 倍,甚至比vector. 没有应用优化,唯一的标志是-std=c++11. 有什么问题?

4

1 回答 1

3

来自关于优化的 GCC文档

在没有任何优化选项的情况下,编译器的目标是降低编译成本并使调试产生预期的结果。语句是独立的:如果您在语句之间使用断点停止程序,则可以为任何变量分配一个新值或将程序计数器更改为函数中的任何其他语句,并从源代码中获得您期望的结果。

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

于 2014-10-20T12:09:14.170 回答