同样的一份代码在VS 2019和Dev C++上跑起来的结果并不很相似,最大的区别就是vs中类大小为20字节,而dev中类大小为16字节,我猜想这是编译器优化的原因。
从如下代码及运行结果来看,虽然细节上有一些出入,但是可以看出,在windows环境下,虚表存放的地址与全局变量、静态变量存储的位置很接近,换句话说,虚表就是存储在程序的数据段中。此外可以看出,即使一个类声明了多个对象,但是他们的虚表指针指向的地址都是一样的,也就是说,同一个类只会有一张虚表
Dev C++
#include<iostream>
using namespace std;
class testA {
int a = 33;
virtual void func1()
{
cout << "fun1:a=" << a << endl;
}
};
class testB :public testA
{
int b = 66;
virtual void func1()
{
cout << "fun1:b=" << b << endl;
}
};
int quanjv = 32;
int main()
{
static int tmp = 21;
testA t1;
testB t2,t3;
testA* p1 = &t1;
testB* p2 = &t2;
testB* p3 = &t3;
cout << "对象p1地址为:" << p1 << endl;
cout