アプリケーションのパフォーマンスを向上させるために、開発段階でループの最適化手法を検討する必要があります。
単純な を反復処理するいくつかの異なる方法を紹介したいと思いますstd::vector<uint32_t> v。
索引付きの最適化されていないループ:
uint64_t sum = 0; for (unsigned int i = 0; i < v.size(); i++) sum += v[i];イテレータを含む最適化されていないループ:
uint64_t sum = 0; std::vector<uint32_t>::const_iterator it; for (it = v.begin(); it != v.end(); it++) sum += *it;キャッシュされた
std::vector::end反復子:uint64_t sum = 0; std::vector<uint32_t>::const_iterator it, end(v.end()); for (it = v.begin(); it != end; it++) sum += *it;プリインクリメント イテレータ:
uint64_t sum = 0; std::vector<uint32_t>::const_iterator it, end(v.end()); for (it = v.begin(); it != end; ++it) sum += *it;範囲ベースのループ:
uint64_t sum = 0; for (auto const &x : v) sum += x;
C++ でループを構築する方法は他にもあります。たとえば、、などを使用しstd::for_eachてBOOST_FOREACH...
あなたの意見では、パフォーマンスを向上させるための最良のアプローチはどれですか?またその理由は何ですか?
さらに、パフォーマンスが重要なアプリケーションでは、ループをアンロールすると便利な場合があります。繰り返しになりますが、どのアプローチをお勧めしますか?