Implementation of Virtual Functions and VTables
Virtual functions, prevalent in C , provide runtime polymorphism, allowing objects to override methods inherited from their base classes. Understanding their implementation at a deep level is crucial for effective usage.
vtable Implementation
Whenever a class declares a virtual function, a virtual table (vtable) is created. This vtable stores addresses to the virtual functions and is class-specific. Each object belonging to that class has a virtual pointer (vptr) pointing to the vtable's memory address. During a virtual function call, the vptr is used to resolve the function address.
vtable Accessibility
The vtable itself is not directly accessible or modifiable at runtime. Language specifications do not require vtables, but most compilers implement them for virtual functions.
vtable Existence
Vtables are created only for classes with at least one virtual function. This is because they incur both space and time overheads.
Abstract Classes and vtables
Abstract classes, with unimplemented pure virtual functions, have an incomplete vtable. They reserve a slot but leave the function pointer unassigned.
Performance Implications
Having a virtual function affects only the calling of that function itself, not the entire class. However, it involves a time overhead in resolving the function address through the vtable. Overriding a virtual function does not improve its execution time.
Additional Overheads
If a derived class overrides a virtual function, it creates a new vtable, increasing space overhead. However, only functions declared as virtual incur the performance penalty of resolving through the vtable.
The above is the detailed content of How Do Virtual Functions and VTables Enable Runtime Polymorphism in C ?. For more information, please follow other related articles on the PHP Chinese website!