static_cast와 dynamic_cast의 속도 비교를 해 보았다.
아래는 실험한 코드와 결과 화면이다. debug로 테스트 한 결과다.
- // 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로 작성하는것이 코드 구동 시간에서도 최적화에서도 더 나은 선택, 반드시 선택해야 될듯 하다.
반응형
'프로그래밍(Programming) > c++, 11, 14 , 17, 20' 카테고리의 다른 글
가상함수의 inline화에 대해서 (0) | 2013.06.29 |
---|---|
콘솔 창 한줄로 띄우기 (0) | 2013.06.09 |
가상 메모리 할당 함수(VirtualAlloc), 예약, 확정, 보호속성, 대용량 메모리 할당 (0) | 2013.05.24 |
operator new 와 메모리 지정 new(placement new) (0) | 2013.05.19 |
Pimpl idiom - 클래스의 내부변수를 숨기는 방법 (0) | 2013.05.19 |