std::array と std::vector による反復間のパフォーマンスの違い
以前のベンチマーク。これは、次の反復パフォーマンスを評価することを目的としていました。 std::array と std::vector には、いくつかの不完全な点がありました。しかし、この問題を再検討すると、std::vector は実際には std::array よりも高速であることがわかりました。
最適化の可能性を軽減するために、次のようないくつかの手段を採用しました。
両方のデータ構造の実行時間は次のとおりです。
std::array:
$ g++ arrVsVec.cpp -O3 $ ./a.out result: 0 time: 99.554109
std::vector:
$ g++ arrVsVec.cpp -O3 $ ./a.out result: 0 time: 30.734491
不一致の理由:
パフォーマンスの不一致は、プロセス アドレスに常駐していない std::array のメモリ ページに起因します。空間。具体的には、グローバル スコープの std::array は実行可能ファイルの .bss セクションにあり、ページインされておらず、ゼロに初期化されています。一方、std::vector は割り当てられ、ゼロに初期化されているため、そのメモリ ページはアドレス空間にすでに存在しています。
問題の解決:
この問題を解決し、2 つのデータ構造間のパリティを実証するには、次のコードを main の最初の行として追加してページを取り込むことができます。
<code class="cpp">std::fill_n(v.data(), n, 1); // included in <algorithm></code>
あるいは、Linux システムでは、 mlock(v.data(), v.size() * sizeof(v[0])); を使用できます。ページをアドレス空間に強制的に挿入します。詳細については、man mlock マニュアル ページを参照してください。
以上が反復において std::vector が std::array より速いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。