在创建若干个对象后,系统为对面分配相应的存储空间,但是只为对象中的变量和成员分配,并不会为方法分配,因为同一类的所有对象共享同一组方法,即每一种方法只有一个副本。
首先我不知道前面的总结是否正确,如果正确的话那么类方法是在什么时候存储到内存中去的?是在定义一个类的时候就创建吗?
在下小白,初学C++,希望得到大家的帮助。非常感激 0.0
你总结的是正确的,每个方法只有一个副本。
首先你要知道一个程序的内存分配,大概分为 代码区,数据区,只读常量区等。你上面提到的函数存放在代码区,而对象是放在数据区的。
至于什么时候放到内存中的,这个一般是程序启动时就把代码区代码装载了(小程序全部加载,大程序有另一套逻辑),然后才开始执行程序。
函数单独在代码区。函数地址放在类对象外面。类的实例创建的时候用函数指针等概念来调用函数
类方法是在什么时候存储到内存中去的?
编译期吧,用的时候从代码段调用,我觉的应该是这么个样子,至于多态啊虚函数啊是虚函数表来搞的
①非多态:那么类的方法呢再类中只存在一个副本,在通过类对象调非静态方法的时候,通过this指针将类的方法和非静态数据关联起来,所以说函数不可能在对象中,
事实上方法就存储于代码区中,编译链接过后它的首地址已经确定了,运行时候就直接将其载入内存就行。
②多态:在有虚函数的的多态类中,编译器会为每一个类维护一张虚函数表,里面存放的是所有虚函数的地址以及类型信息,而每个类的对象则首地址处存
放虚表的首地址。
C++ 对象在 机器码中并不存在, 不过是一堆数据地址,成员方法就是 C 中的函数地址,只不过多传了一个“THIS” 参数。
类方法在代码段,是不分配内存的。