一个对象实例化后,成员函数代码占用空间吗?理论上说,类的成员函数代码是所有类所共享的,我不明白,成员函数的代码是谁分配的呢?
-----------------------
如果说成员函数是这个类的所有对象共享,那么就不应该是实例化对象时分配内存空间的。可是类定义本身也是不会分配空间的呀,这就不明白了,这些成员函数代码所占的空间是谁来分配的呢?在哪里分配。何时分配。对象中的数据成员所占的空间一定是这个对象实例化时分配的。这个好理解,不同的对象都有不同的数据成员,互不相干。但是成员函数就不同了,一个类可以实例化很多对象。但是这些对象是共享同一段成员函数的代码呀。请大家进来说说,谢谢。 

解决方案 »

  1.   

    从汇编的角度看 成员函数跟普通的函数没什么两样
    只是参数经过C++编译器的修改,第一个参数总是this
      

  2.   

    如1楼所说的,成员函数跟不同的函数没什么两样,编译后的代码存储在PE文件的.txt节区中。
    程序加载后.txt节区会直接映射到内存中,不存在动态分配的问题,不管有没有对象实例化,也不管多少个对象实例化,它们都在内存中。
      

  3.   

    对象的实例化导致的动态内存分配只包括非静态成员变量需要的空间和虚表指针(如果有虚函数的话)成员函数的代码占用的空间是编译器生成exe时就分配好的了,静态成员变量亦是如此。