반응형


static_cast와 dynamic_cast의 속도 비교를 해 보았다.



아래는 실험한 코드와 결과 화면이다. debug로 테스트 한 결과다.





  1. // cmd.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5.   
  6. class object  
  7. {  
  8. public:  
  9.     virtual void print() { cout << "object" << endl; }  
  10.     virtual void copy(TCHAR* a) {}  
  11. };  
  12.   
  13. class AAA : public object  
  14. {  
  15. public:  
  16.     virtual void print() { cout << "AAA" << endl; }  
  17.     void copy(TCHAR* a) { _tcscpy( str, a ); }  
  18.       
  19. private:  
  20.     TCHAR str[1024];  
  21. };  
  22.   
  23. int _tmain(int argc, _TCHAR* argv[])  
  24. {  
  25.     object* mTestObject = new AAA;  
  26.   
  27.     CCheckTime t; t.start();  
  28.       
  29.     for(DWORD i=0; i<10000000; i++)  
  30.         static_cast<AAA*>(mTestObject)->copy("KOREA");  
  31.   
  32.     cout << "static_cast : " << t.end() << "ms" << endl;  
  33.     t.start();  
  34.   
  35.     for(DWORD i=0; i<10000000; i++)  
  36.         dynamic_cast<AAA*>(mTestObject)->copy("KOREA");  
  37.   
  38.     cout << "dynamic_cast : " << t.end() << "ms" << endl;  
  39.   
  40.     delete mTestObject;  
  41.     return 0;  
  42. }  





2배 정도 차이나는걸로 보이는데 릴리즈로 컴파일하게 되면 더 차이가 날 듯 하다.

아마도 검사하는 부분이나 기타 설정부분에서 dynamic_cast가 하는 일이 많으니 이런 일이 생기는듯 하다..


아마도 상속관계를 확실히 알고 있다면 dynamic_cast보다는 static_cast로 작성하는것이 코드 구동 시간에서도 최적화에서도 더 나은 선택, 반드시 선택해야 될듯 하다.


반응형

+ Recent posts