가상함수 테이블 크기

으네이의 이미지

c++에서 가상함수 테이블 크기는 포인터 크기 4바이트인가요? ( 32비트 기준 )

만약 가상함수가 여러개 생기면 가상함수 테이블 크기가 늘어나나요?

익명 사용자의 이미지

vtable 크기는 정해져 있지 않습니다. 컴파일러 마음대로입니다. 심지어 vtable을 안만들수도 있습니다. (virtual) dynamic dispatch 를 실제로 어떤 식으로 구현할지는 표준이 정하지 않고 있기 때문입니다. 어떻게든 구현하면 되는 것이지 꼭 vtable을 사용해야할 필요는 없습니다. 컴파일러 맘입니다.

vtable을 만든다면 가상함수가 많아질수록 그 크기가 늘어나기는 하겠지요. 그런데 보통 vtable은 클래스당 하나이지 인스턴스당 하나가 아닙니다. 인스턴스는 vtable에 대한 포인터를 가지고 있을뿐입니다. 따라서 각 인스턴스가 차지하는 메모리의 크기는 가상함수의 수와 관계 없습니다.