首先类的内存空间大小,只与类中非静态的成员变量(int, char*)和虚函数指针个数有关,其中函数被存放到text区域,静态成员变量存放到.rodata区域,其实也就是数据区上面的只读存储区
顺便提一下,类的所有实例化对象共享类的虚函数表,虚函数表中存放的是虚函数的指针(也就是存放函数的地址),因此虚函数表的每一项都是sizeof(pointer)的大小(32位系统就是4B,64位就是8B)
当一个类中有虚函数时,类的内存中首先会存放虚函数表的指针,其次才会存放类中的非静态成员变量
虚函数表存放在C++内存模型的常量区,具体的虚函数存放在代码段
class Aarrt
{
int a = 1;
int b = 2;
virtual void vfunc() {
}
void print()
{
cout << 1 << endl;
}
};
int main()
{
cout << sizeof(Aarrt) << endl;
}
类的结构如下:
, 输出为12
当类Barrt继承了一个含有虚函数的Aarrt类的时候,Barrt会继承父类的虚函数表指针,并将其转为Barrt自己的虚函数表
class Aarrt
{
int a = 1;
int b = 2;