Thinking Different




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


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



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
// cmd.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
 
#include "stdafx.h"
 
class object
{
public:
    virtual void print() { cout << "object" << endl; }
    virtual void copy(TCHAR* a) {}
};
 
class AAA : public object
{
public:
    virtual void print() { cout << "AAA" << endl; }
    void copy(TCHAR* a) { _tcscpy( str, a ); }
    
private:
    TCHAR str[1024];
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    object* mTestObject = new AAA;
 
    CCheckTime t; t.start();
    
    for(DWORD i=0; i<10000000; i++)
        static_cast<AAA*>(mTestObject)->copy("KOREA");
 
    cout << "static_cast : " << t.end() << "ms" << endl;
    t.start();
 
    for(DWORD i=0; i<10000000; i++)
        dynamic_cast<AAA*>(mTestObject)->copy("KOREA");
 
    cout << "dynamic_cast : " << t.end() << "ms" << endl;
 
    delete mTestObject;
    return 0;
}




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


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



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


아니면 아무래도 템플릿 기반의 RTTI를 구성하는 방법은 필수인듯...

'프로그래밍 언어 > C++' 카테고리의 다른 글

simple winpcap sniffer source  (0) 2013.11.02
simple winsock sniffer source  (0) 2013.11.02
c++ 문자열 공백 제거 매크로  (0) 2013.03.03
CAtlList 사용법 및 정리  (0) 2013.02.28
CAtlMap 정리 및 예제  (0) 2013.02.28