虚拟表是如何存储在内存中的?他们的布局?
例如
class A{
public:
virtual void doSomeWork();
};
class B : public A{
public:
virtual void doSomeWork();
};
A类和B类的虚表在内存中会如何布局?
最佳答案
对于 Linux 中的 GCC 编译器,运行:
g++ -fdump-class-hierarchy example.h
输出是:
Vtable for A A::_ZTV1A: 3u entries 0 (int (*)(...))0 8 (int (*)(...))(& _ZTI1A) 16 (int (*)(...))A::doSomeWork Class A size=8 align=8 base size=8 base align=8 A (0x7fb76785a4e0) 0 nearly-empty vptr=((& A::_ZTV1A) + 16u) Vtable for B B::_ZTV1B: 3u entries 0 (int (*)(...))0 8 (int (*)(...))(& _ZTI1B) 16 (int (*)(...))B::doSomeWork Class B size=8 align=8 base size=8 base align=8 B (0x7fb7678510d0) 0 nearly-empty vptr=((& B::_ZTV1B) + 16u) A (0x7fb76785a540) 0 nearly-empty primary-for B (0x7fb7678510d0)
Also I've created the vtable-dumper tool to list contents of virtual tables in the shared objects. With this tool you don't need to compile headers, just run it on the object:
vtable-dumper SHLIB
关于c++ - 内存中的虚拟表布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1342126/