私は生ポインタ間のパフォーマンスを比較しようとしています。これは、shared_ptrをブーストし、weak_ptrをブーストします。逆参照部分では、shared_ptrとraw_ptrが等しいと予想しましたが、結果はshared_ptrが約2倍遅いことを示しています。テストのために、私はint型へのポインタまたは共有ポインタのいずれかの配列を作成していますし、このようなループ内でデリファレンス:ブーストshared_ptr逆参照コスト
int result;
for(int i = 0; i != 100; ++i)
{
for(int i = 0; i != SIZE; ++i)
result += *array[i];
}
テストのための完全なコードはここで見つけることができます: https://github.com/coolfluid/coolfluid3/blob/master/test/common/utest-ptr-benchmark.cpp
アサーションのない最適化されたビルドのテストタイミングは、ここで見つけることができます:関心の http://coolfluidsrv.vki.ac.be/cdash/testDetails.php?test=145592&build=7777
値は「DerefShared時間」と「DerefRaw時間」です
私はテストに何らかの欠陥があるかもしれないと思いますが、違いがどこにあるのか理解できませんでした。プロファイリングでは、shared_ptrの演算子*がインライン展開されていることを示しています。時間がかかるようです。ブーストアサーションがオフであることを再確認しました。
誰かが違いがどこから来るのか説明できるのであれば、非常に感謝します。
追加のスタンドアロンテスト: https://gist.github.com/1335014
+1、私も先日このことについて考えていました。 –
キャッシュ効果? shared_ptrは生のポインタよりも大きいので、あなたの配列はより多くのキャッシュラインをカバーし、読み込みに時間がかかります。 –
これらのテストはどのプラットフォームで実行していますか? – SoapBox