개발자 면접 공부/C-C++

VTable 위치 파악

chogyujin 2024. 3. 25. 19:26
728x90

1. 개요

오늘은 가상함수의 필수 가상함수 테이블(Virtual Table)에 위치에 대해 알아보도록하겠습니다.


2. VTable이란?

가상함수 테이블은 클래스 내에서 맴버함수를 virtual 키워드로 지정하면 생성되는 테이블입니다.
특수한 메모리 영역을 활용하여 알맞는 함수를 호출하는데 보통 함수 포인터로 지정이되있습니다.
또한, 가상함수 테이블은 한 객체당 하나의 테이블만 지정이되있으며 함수가 아무리 많아도 한개만 되있습니다.
가상함수 테이블은 OOP의 특징중 다양성을 띄고 있으며 동적 바인딩으로 상속에서 매우 중요한 역할을 합니다.

예전에 올렸던 가상함수 테이블에 대해 링크를 올리겠습니다.

https://chogyujin-study.tistory.com/23

 

C++ Virtual(가상) 함수

오늘은 Virtual 함수 가상 함수에 대해 공부하도록 하겠습니다. 가상 함수란? - 기본 클래스 내에서 선언되는 파생 클래스에 의해 재정의되는 맴버함수 가상 함수를 호출하고 파생 클래스의 함수

chogyujin-study.tistory.com


3. 그래서 어디에?

가상함수 테이블은 vPointer가 vTable을 가리키게 되고, vTable은 컴파일러에 의해 함수 포인터를 가리키는 자료구조로 완성이 됩니다.
또한, 가르키는 함수 포인터는 특징 객체에 맞는 포인터를 가지게 됩니다.
그래서 수소문 결과 코드 영역에 저장된다는것을 알게되었습니다.
그 이유는 생성된 객체가 vTable을 통해 접근해야 하는데 전역으로 공유되어야 하기 떄문이라고 합니다.


 

3. Ref

https://guru.tistory.com/125?category=1038889

 

Vtable - 어디에 존재하는가..

0. Vtable 이란 vtable 이란, Virtual Function Table의 약자로, 상속 구조에서 메서드를 virtual로 선언하게 되면, vtable이 생성되게 됩니다. vtable(가상 테이블)은 특수한 메모리 영역을 활용하여 알맞은 코드

guru.tistory.com