언어/Basic C++

[Basic C++] #20_virtual 키워드, vtable 오버헤드

Hardii2 2022. 5. 1. 18:41

[Basic C++] #20_virtual 키워드, vtable 오버헤드 

 

C++ 개발에서 오버라이딩을 사용 시 주의할 점에 대해서 알아보겠습니다.

"전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다.

 

 


 

virtual 키워드 사용 이유

 

Java 언어는 모든 메소드를 무조건 virtual로 취급합니다.

이처럼, C++에서도 모든 메소드를 virtual로 취급하면 더 편리하지 않을까 생각합니다.

그럼에도 불구하고, "virtual" 키워드의 강조는 "vtable" 이용에 따른 오버헤드때문입니다.

 

"virtual" 메서드, 즉 가상 멤버 함수 호출을 위해 "vtable"이 담고 있는 포인터를 역 참조하여

실행할 메서드의 위치를 찾아오는 부가적인 작업이 필요합니다.

 

물론, 날로 발전하고 있는 CPU 성능에 따라, virtual 메소드의 사용은 나노초 이하의 작은 단위로 측정되고 있습니다. 성능 차이가 미미하지만, 알아 두는 것이 좋겠습니다.