make_sharedパフォーマンス(boostまたはstl)について私が理解していることについて少し疑問があります。make_shared(boostまたはstl)は私のテストでshared_ptr + newよりやや遅いようです。
C++でのアプリケーションの作業パフォーマンステストを行う必要がありましたが、make_sharedとshared_ptr + newを比較することになりました(パフォーマンス改善の目的ではないことに注意してください。しかし、私は1.55
- Debianのジェシーのx64
- を使用)今だけ
興味10
私は、make_sharedがより効率的であることを読んでいます。割り振り番号(オーバーヘッド)を見ればわかります(私が理解できる限り)。
しかし、迅速かつ愚かなテストをやって、私は
std::shared_ptr<MyUselessClass> dummyPtr = std::shared_ptr<MyUselessClass>(new MyUselessClass()); auto start = boost::chrono::high_resolution_clock::now() ; // - STD Share std::shared_ptr<MyUselessClass> stdSharePtr = std::shared_ptr<MyUselessClass>(new MyUselessClass()); auto stdSharePtrTime_1 = boost::chrono::high_resolution_clock::now() ; // - STD Make std::shared_ptr<MyUselessClass> stdMakePtr = std::make_shared<MyUselessClass>(); auto stdMakePtrTime_2 = boost::chrono::high_resolution_clock::now() ; // - BOOST Share boost::shared_ptr<MyUselessClass> boostSharePtr = boost::shared_ptr<MyUselessClass>(new MyUselessClass()); auto boostSharePtrTime_3 = boost::chrono::high_resolution_clock::now() ; // - BOOST Make boost::shared_ptr<MyUselessClass> boostMakePtr = boost::make_shared<MyUselessClass>(); auto boostMakePtrTime_4 = boost::chrono::high_resolution_clock::now() ; boost::chrono::nanoseconds stdShare = boost::chrono::duration_cast<boost::chrono::nanoseconds>(stdSharePtrTime_1-start) ; boost::chrono::nanoseconds stdMake = boost::chrono::duration_cast<boost::chrono::nanoseconds>(stdMakePtrTime_2-stdSharePtrTime_1) ; boost::chrono::nanoseconds boostShare = boost::chrono::duration_cast<boost::chrono::nanoseconds>(boostSharePtrTime_3-stdMakePtrTime_2) ; boost::chrono::nanoseconds boostMake = boost::chrono::duration_cast<boost::chrono::nanoseconds>(boostMakePtrTime_4-boostSharePtrTime_3) ; cout << "---" << endl ; cout << "STD share " << stdShare << endl ; cout << "BOOST share " << boostShare << endl ; cout << "STD make " << stdMake << endl ; cout << "BOOST make " << boostMake << endl ;
得るかを理解していないMyUselessClassは3クラス属性(刺す、ブール値、int型)、そして唯一のコンストラクタとdesctructorと単純なクラスです。
「結果」(それが正確なテストではありませんので、私はもちろん、引用)(私は同じ結果を、多くの反復を取得するためにループにそれをrunned平均になります)、次のとおりです。
STD share 162 nanoseconds BOOST share 196 nanoseconds STD make 385 nanoseconds BOOST make 264 nanoseconds
私がテストを信じるなら、make_sharedはshare_ptrを新しいインスタンスに呼び出すよりも少し遅いです。
- を多分私のテストがあまりにも愚かである、nanosecons順序がには重要性を持っていない:私は、逆にナノ秒の精度など任意の違いを確認した場合、私は、だから今、私は疑問に思って...、
を期待しているだろうその操作は?
- 多分私はmake_sharedのより良いパフォーマンスの説明で一点を逃したのでしょうか?
- 多分私はテストでいくつか(serveral)ポイントを逃したのですか?あなたは以下の点のいくつかの答えを持っている場合は
、躊躇しないでください:)
ありがとう
- を多分私のテストがあまりにも愚かである、nanosecons順序がには重要性を持っていない:私は、逆にナノ秒の精度など任意の違いを確認した場合、私は、だから今、私は疑問に思って...、
共有ポインタを作成する呼び出しを1回だけ測定する必要はありません。ループ内に多くのポインタを割り当てて比較してください。 –