2010-04-26 4 views
2

가능한 중복 :
What is the performance cost of having a virtual method in a C++ class?인터페이스의 사용으로 인해 프로그램 속도가 느려 집니까?

그것은 인터페이스 프로그램을 느리게한다는 사실인가요? 이 인터페이스를 구현하는 객체를 사용할 때마다 실행 시간 동안 각 객체가 속한 인터페이스를 구현하는 클래스를 결정해야하기 때문에 이것이 사실이라고 들었습니다.

저는 C++에 대한 답변뿐만 아니라 일반적으로 흥미가 있습니다. 그리고 이것이 사실이라면 어떤 숫자도 도움이 될 것입니다.

대단히 감사합니다!

답변

2

빌리 (Billy)는 other post on SO과 많이 닮았지만 정확히 같은 것은 아니라고 생각합니다. 주로이 질문의 표현 방식 때문입니다.

Olga가 "결정"에 대해 말했기 때문에 인터페이스를 사용하는 것과 파생 클래스를 사용하는 것 사이에서 혼란스러워하고 객체에 대한 포인터가 dynamic_cast를 통해 특정 클래스에 속하는지 확인했습니다.

dynamic_cast를 사용하는 것에 대해 이야기하고 있다면, 내가 이해하는 바에 따르면 (이는 구체적인 성능 수치를 기반으로하지 않음) 상당히 중요한 실적을 보게 될 것입니다.

인터페이스를 사용하는 것에 대해 이야기하는 경우, vtable 조회 및 추가 호출을 수행 할 때의 마이너 히트가 더 나은 소프트웨어 설계보다 훨씬 중요하다고 생각합니다.

3

네,하지만 인터페이스가 요구하는 융통성이 필요한 경우에는별로 중요하지 않습니다. (인터페이스를 심하게 사용하는 경우 vtable의 관련 비트가 L1 또는 L2 캐시로 끝나기 때문에 거의 두려워하지 않을 것임을 유의하십시오.

+0

+1 L1 및 L2 캐시 - 재미 있고 관련성이 높고 새로운 – Elemental

3

동적 디스패치 가상 기능 사용)은 직접 호출보다 비용이 많이 듭니다.

그러나 성능 리미터가되기 위해서는이 프로그램이 비정상적이어야합니다. 디스크/네트워크 액세스, UI 또는 메모리 대역폭 업데이트와 같은 것들이 성능을 제한 할 가능성이 더 큽니다.

0

인터페이스 패턴 (예 : C++의 추상 클래스)을 사용하는 경우 가상 함수 호출에 오버 헤드가 발생합니다. 그러나 동일한 것을 달성하기 위해 자신 만의 비 추상적 클래스 메커니즘을 구현하면 VF 호출보다 큰 오버 헤드가 발생할 수도 있습니다. 따라서 실제로는 추가 오버 헤드가 없습니다.

0

아마도 C++의 가상 상속에 대해 이야기하고있을 것입니다. 가상 클래스가 중요한 코드 경로에서 사용되지 않으면 성능 저하가 미미합니다. 기본적으로 오버 헤드는 추가 함수 호출과 같습니다.

관련 문제