C++

C++ virtual 내부 작동 방식

park__ 2024. 12. 14. 22:34

 C++ 에서 클래스를 컴파일하면 그 클래스의 모든 메서드를 담은 바이너리 객체가 생성됩니다. 이 때, virtual로 선언되지 않은 메서드를 호출하는 부분을 컴파일 시간에 결정된 타입의 코드로 교체합니다. 이를 정적 바인딩(static binding) 또는 이른 바인딩(early binding)이라 부릅니다. 메서드를 virtual로 선언하면 vtable(가상 테이블)이라 부르는 특수한 메모리 영역을 활용해서 가장 적합한 구현 코드를 호출합니다. virtual 메서드가 하나 이상 정의된 클래스마다 vtable이 존재하는데, 이 클래스로 생성된 객체마다 vtable에 대한 포인터를 갖게 됩니다. virtual 메서드의 구현 코드에 대한 포인터는 바로 이 vtable에 담겨 있습니다. 그래서 객체에 대해 메서드를 호출하면 vtable을 보고 그 시점에 적합한 버전의 메서드를 실행합니다. 이를 동적 바인딩(dynamic binding) 또는 늦은 바인딩(late binding)이라고 합니다.

'C++' 카테고리의 다른 글

onnxruntime 사용시 주의 사항 - 1  (1) 2025.01.10
C++ 소멸자에 virtual을 사용하는 이유  (0) 2024.12.15
register c++  (0) 2024.12.13
Intel Intrinsics SIMD  (0) 2024.12.10
OpenMP 란  (0) 2024.12.10