分类: C/C++
2010-08-03 13:32:27
class test
{
int a;
int b;
int add(int a1,int a2);
virtual print();
static int getobjnum();
static int num;
};
假设有上面类test,声明一个test的对象,test类对象里面包含的内容有:
指向虚函数表的指针pvtable
a
b
所以如果 test t1;sizeof(t1)=12;
那么虚函数表,静态变量num存放在哪里呢?
其实类中的虚函数表和静态变量时作为全局变量存储的。
附加说下Windows PE文件,PE文件中保存了导入函数表和导出函数表,例如一个DLL,如果有导出函数,就会保存有导出函数表,如果一个exe程序调用了该DLL的导出函数,则在这个exe文件会有一个导入表,导入表记录的是DLL导出函数的地址。 另外如果一个DLL里面声明了一个导出类,该类有虚函数表,则虚函数表也会被导出,但是主程序exe只使用这一份虚函数表,不会自己复制一份。