我想在我的程序中用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
。
可能有什么不对?
答案 0 :(得分:3)
来自GCC documentation about Optimization:
没有任何优化选项,编译器的目标是减少 编译成本和使调试产生预期的 结果。陈述是独立的:如果你用a停止程序 语句之间的断点,然后您可以为任何分配新值 变量或将程序计数器更改为中的任何其他语句 函数并获得您希望从源代码中获得的结果。
如果没有-O选项,GCC不关心性能。它关心使用gdb
或其他类似工具进行调试。要实际编译尽可能快地运行的程序,您应该使用-O
选项。例如,-O2
。