何时为 C++ 中的类的成员函数分配内存空间?

Posted

技术标签:

【中文标题】何时为 C++ 中的类的成员函数分配内存空间?【英文标题】:When is the memory space for a member function of a class in C++ allocated? 【发布时间】:2014-02-25 12:56:26 【问题描述】:

在阅读时,我阅读了这些关于 C++ 中类的成员函数的内存分配的相互矛盾的陈述。 一位消息人士称,该空间是根据需要从内存堆栈中为成员函数分配的。 而另一个说空间是在创建该类的第一个对象时分配的。

另一方面,我认为成员函数的空间是在编译或运行时本身开始时分配的,然后该类的所有对象都使用函数代码。

有人可以澄清和详细说明吗? 谢谢。

【问题讨论】:

什么“空间”?你的意思是代码?对于论点?对于局部变量?对于上述的组合或全部? 以上所有的组合。 【参考方案1】:

什么记忆?需要内存来存储实际(编译代码)和变量(数据)的内存。因此,您的两个答案都是正确的。

【讨论】:

【参考方案2】:

成员函数不会影响类对象的内存使用,除非一个类有虚函数,那么它会保留一个指向虚函数表的指针。

与任何函数一样,如果程序中无法访问该函数,则成员函数可以没有定义。否则链接器将发出一个错误,指出对函数的引用未定义。

编译器为成员函数生成代码的方式与为非成员函数生成代码的方式相同。所以如果有定义成员函数的时候编译器会生成相应的代码。

我认为您的意思是模板类的成员函数,那么如果使用它们,它们确实会被实例化。

【讨论】:

以上是关于何时为 C++ 中的类的成员函数分配内存空间?的主要内容,如果未能解决你的问题,请参考以下文章

C++面向对象编程:对象的内存分配与静态成员

C++面向对象编程:对象的内存分配与静态成员

C++中的类所占内存空间总结

C++静态成员变量在内存中的存储方式

C++静态成员变量在内存中的存储方式

类成员函数中定义的的static变量的内存是怎么分配的?