가상함수는 객체지향의 핵심으로 공학적으로 아름답다. 다만 성능에 대해서는 의견이 많이 갈린다.
컴파일타임에 호출될 함수가 결정되는 일반함수와 달리, 가상함수는 런타임에서 실제 호출될 함수가 결정되며,가상함수 테이블을 통해 간접적으로 호출된다.
따라서 추가적인 오버헤드가 발생한다.
가상함수 테이블 포인터(vptr)을 통해서 올바른 함수 포인터를 찾는 시간
함수 포인터를 통해 실제 함수로 점프하는 시간 (캐시미스)
하지만 이러한 오버헤드는 현대 컴파일러가 최적화를 잘 해준다고 믿고 있으므로 매우 작을것으로 기대한다.
아래 글에서는 세가지를 알아본다.
Fast Virtual Functions: Hacking the VTable for Fun and Profit
1. 가상함수의 성능 저하를 피하는 방법
2. 가상함수의 대량 배치를 빠르게 만드는 방법
3. 가상 함수가 오버라이드 되었는지 감지하는 방법
(생략)