种的存储结构

类的存储结构

   每次想探究下类的存储结构,总是不得而知,现在终于弄通了,现在解析如下

   首先类本身是不占内存的,但是类本身是有大小的,只有类的实例才能占内存。类的元素分为两种:类的成员变量(存储在栈区),类的函数(存储在代码区)。但是涉及到继承和virtual就要重新考虑了。

    1.有虚函数+实继承的情况:存储区位置分布:指向虚函数表(父类和本身的虚函数都在里面,而且父类在前)的指针+父类变量在前+子类本身变量在后面

种的存储结构种的存储结构

 

 

         2、有虚函数+实继承(一个重载的情况)的情况:存储区位置分布类似上面:指向虚函数表(父类和本身的虚函数都在里面,而且父类在前,重载的那个父类的函数位置被子函数名替代,具体不同比较右图)的指针+父类变量在前+子类本身变量在后

         3、有虚函数+实继承(一个)的情况:存储区位置分布类似上面:指向本身虚函数表的指针+一个字节的0分隔符+子类成员变量在前+指向父类虚函数表的指针+父类成员变量在后

种的存储结构

 

   还有比如多继承的情况,及其它情况等等,见参考的网页:c++实例在内存中的分配、c++类对象内存结构(后面的比较经典)

  

 

 

 

 

 

 

 

 

 

 

 

1楼nj_dobetter昨天 18:13
Mark!