shared_ptr 성능 이슈 및 테스트
프로그래밍 언어/boost2014. 4. 2. 17:36
간단히 shared_ptr<> 의 성능에 대해서 짚어보았다.
총 3가지로 테스트하였으며(native pointer, reference, copy value) 성능 결과는 생각보다 충격적이었다.
native >= reference >>>>> copy value 로 나타났다
테스트 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #include "stdafx.h" #include <boost/timer.hpp> #include <memory> class test { public: test() : a(0) {} public: void func() { a++; } private: unsigned long a; }; void native(test* a) { a->func(); } void copy(shared_ptr<test> a) { a->func(); } void ref(shared_ptr<test>& a) { a->func(); } #define COUNT 50000000 int _tmain(int argc, _TCHAR* argv[]) { shared_ptr<test> a(new test); boost::timer t; for (int i = 0; i < COUNT; ++i) { native(a.get()); } cout << "native: " << t.elapsed() << endl; t.restart(); for (int i = 0; i < COUNT; ++i) { ref(a); } cout << "reference: " << t.elapsed() << endl; t.restart(); for (int i = 0; i < COUNT; ++i) { copy(a); } cout << "copy: " << t.elapsed() << endl; return 0; } |
테스트 결과1 (디버그 모드)
테스트 결과2 (릴리즈 모드)
역시 구글 코딩 가이드의 Google-Specific Magic 에서 나온 스마트포인터 사용법에서 처럼 shared_ptr보다는 scoped_ptr를 주로 사용하도록 하는것이 좋을 것 같고, auto_ptr은 절대 써서는 안되는 쓰레기인건 분명하고, 적절한 shared_ptr이 사용 가능한 부분들에서 특별한 경우에만 사용되는것이 좋을듯 하다(필자는 싱글턴 패턴에서 사용중)
'프로그래밍 언어 > boost' 카테고리의 다른 글
Boost.Pool (0) | 2015.04.28 |
---|---|
Boost.Thread (0) | 2015.04.28 |
Boost.Lexical_cast (0) | 2014.04.02 |
Boost.Any (0) | 2014.04.02 |
nuget 관리자를 활용한 boost 시작하기 (0) | 2014.03.29 |