babo_ptr은 내가 실험삼아 만드는 스마트 포인터 이다. 메모리 릭 테스트도 다 끝냈다.

이 상태에서 .. 두 스마트 포인터의 비교...

우선 shared_ptr을 조금 밖에 분석을 못했는데,
1. 쓰레드 동기화 기법도 들어갔다.
2. shared_ptr 8바이트, count 용 8바이트
3. 기본적인 예외처리 되어 있음



babo_ptr 은..
1. 쓰레드 동기화를 뺏다.
2. babo_ptr은 8바이트, 중 count 용 4바이트 를 소모 한다.
3. 예외처리 안되어 있음;;

이렇게 만들었다.

.. 생성 시간 비교에선 babo_ptr이 약간 빠르다. 이건 당연할듯 4바이트 적게 생성하니까..
문제는 .. 소멸할 때, babo_ptr은 약 10초라면 shared_ptr은 5초이다.

도저히 이해가 가지 않아, 선생님께 여쭈어 보니, 릴리즈 모드와 디버깅 모드가 있으니, 릴리즈 모드로 해도 똑같은지 비교해보라고 하셨다.

전체 성능비교 (12byte * 10만개 생성및 소멸 시험)
릴리즈 모드의 성능 babo_ptr > shared_ptr 총 40ms 앞선다. .... 엄청 미미하다.
디버깅 모드의 성능 babo_ptr < shared_ptr 총 6000ms 앞선다, 엄청난 성능이다.


결론
.. 뻘짓거리 하지 말고 boost::shared_ptr 을 사용 하자.. 하지만 주위에서 사용 안하니, .. 코드 재사용 때문에 나도 사용을 못한다;;


여담
릴리즈 모드에서 함수 호출에 들어 가는 비용은 42억번 호출당 0ms 정도이다. .. 거의 비용을 물지 않는다고 보면 된다.
디버깅 모드에선 함수 42억번은 좀 느려, 1억번을 카운팅하고 1회 호출당 .. 시간은 0.00007ms 비용을 지불한다.(프라스캇 630 기준)

.. 함수 호출 비용이 프로그래램 속도에 전혀 영향을 주지 않는다는것을 알수 있다.
도데체 왜 C 가 C++ 보다 빠르다는 말이 나왔을까? 빨라봐야 0.00001ms 빠를까 말까 할텐데 말이다.


이번 테스트로 알게 된 진실들
1. 함수 호출 비용은 프로그램 속도에 전혀 영향을 주지 않는다.
2. C가 C++보다 빠르다는 소리는 헛소리다.
3. public으로 데이터를 관리하는 이유는 Get Set 이 귀찮아서이지, 호출 비용 때문이 될 수 없다!
4. 성능을 향상 시키려면, 설계, 알고르즘 개선이 엄청난 효과를 낸다.


posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요

  1. Favicon of http://ikpil.tistory.com 게임 프로그래머라 불릴 최익필 2008.07.11 19:05  Addr  Edit/Del  Reply

    당분간 사람들이 shared_ptr 사용하기 전까지 babo_ptr 쓰면서, 프로젝트 시작하면 boost 쓰자고 건의 해야겠다.

  2. Favicon of http://ikpil.tistory.com 게임 프로그래머라 불릴 최익필 2008.07.14 05:08  Addr  Edit/Del  Reply

    babo_ptr 이 boost::shared_ptr 에서 메모리 해체시 다른 방법으로 해체해서 그런게 아닐까 한다.