static_cast vs dynamic_cast 속도 비교
프로그래밍 언어/C++2013. 4. 9. 15:36
static_cast와 dynamic_cast의 속도 비교를 해 보았다.
아래는 실험한 코드와 결과 화면이다. debug로 테스트 한 결과다.
123456789101112131415161718192021222324252627282930313233343536373839404142 // 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 |