Possible Duplicate:
Understanding the vtable entries
Using g++ version 4.6.3, 64-bit machine . I know compiler is free to implement virtual functions any way it wants. I want to know what happened here.
My class:
#include <iostream>
class test
{
public:
virtual void func(){std::cout<<"in class test";}
};
int main()
{
test obj;
obj.func();
return 0;
}
Looking at virtual table generated by compiler,
Vtable for test
test::_ZTV4test: 3u entries
0 (int (*)(...))0 (<---- what is this? )
8 (int (*)(...))(& _ZTI4test)
16 (int (*)(...))test::func
At offset 8 it is RTTI
At offset 16 it is entry for virtual function.
My question is why is there entry for NULL at offset 0 or in other words what is the purpose of first entry?
P.S. I thought this could be related to alignment, but then I added more virtual functions but RTTI entry was still at offset 8.
I believe the first entry or the entry at 0 the is the offset to top pointer.
See the following relevant stackoverflow question
Looking through the remainder -fdump-class-hierarchy from your source code , most classes seem the have the first entry as (int (*)(...))0
, the only classes that don't have it as the first entry have it as the second and have the first entry as the offset to the parent class given the C++ STL class hierarchy for streams.
In the relevant question a dead link to some vtable examples is given, I believe a live version of that link is available here
Another useful resource detailing the structure of vtables is here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With