アルゴリズムを最適化していた。私は奇妙な奇妙なことに遭遇しました。
以下:
//The following is completely unused
vector<int>** rotated_squares;
rotated_squares = new vector<int>*[31];
for (int i=0;i<31;++i) {
rotated_squares[i] = new vector<int>[31];
}
{
//Lots of computation, using other vectors, but not rotated_squares
}
。。。少なくとも10倍遅い:
{
//The exact same computation as above.
}
何が原因なのかわかりません。私が考えることができる唯一のことは、それが何らかの形で基礎となる実装のアーティファクトであるということです。そのために、Visual Studio 2010 forC++コンパイラを使用します。
編集:明確化、以下の計算は遅くなる部分です。プロファイリングの場合、上部のメモリ割り当てはほとんど無視できます。
したがって、問題は、上部に行を追加すると、コードの実行速度が約10倍遅くなることです。デバッグにより、追加のメモリ割り当てには数分の1秒かかりますが、通常は約8秒かかる計算コードは、数分かかり始めます。
編集:一般的な需要により、アルゴリズムのソースはここで見つけることができます:http: //pastebin.com/Yf78gTNC。重要なのは、#if 1を設定または設定解除でき、コードが正常にコンパイルされることです。ただし、これを使用すると、計算セクションでの実行速度が大幅に低下します。
編集:私はコードを次のように減らしました:http://pastebin.com/mpnPsQE1。私のコードでは、これが問題の原因です。ただし、単純なテストケース(つまり、このコードだけを使用したメイン関数)を作成しても、問題は発生しません。