私は自分のプログラムでに置き換える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
です。何が間違っている可能性がありますか?