我目前正在阅读C++对象模型内部。在第9页,它有一个图表,展示了一个类的内容是如何在内存中布局的。它声明对象中唯一实际驻留在类内存中的部分是非静态数据成员。
这是一篇来自SO的关于程序内存内容的帖子:
Global memory management in C++ in stack or heap?
在第二个答案中,它详细描述了程序的内存布局--显示了堆栈和堆。
静态数据成员/任何类函数(基本上是类中未存储在对象中的部分-请参阅第9页)的位置是否会根据对象是在堆栈上还是在堆上而改变?
发布于 2012-07-02 00:52:48
静态数据成员与全局变量和普通静态变量驻留在同一个内存区域中。它是“类内存”,它可以在堆栈上,也可以在堆上,这取决于类的实例是如何创建的。
静态数据成员与全局变量没有太大区别。但是,它的作用域是由类名限定的,并且可以通过public、private和protected按名称控制它的访问。public为每个人提供访问权限。private将访问限制为仅访问类的成员,而protected类似于private,但将访问扩展到从具有静态数据成员的类继承的类。
相比之下,每个人都可以通过名称访问全局变量。普通静态变量可以通过同一源文件中的代码通过名称进行访问。
普通类方法实际上只是一个常规函数(取模访问控制),但它有一个隐式的this参数。它们不占用类中的任何空间。但是,virtual类方法将占用类中的一些内存,因为它必须解析为该方法的派生类实现。但是,多态可能还没有在你的教科书中涉及到。
发布于 2012-07-02 00:53:24
不会,变量的分配位置不会影响静态数据或代码的存储。它们通常存储在不同的内存区域中,这些区域既不是堆栈也不是堆。
函数和静态数据成员的特殊之处在于,它们在整个程序中只有一个副本。
类或其他类型的变量通常在程序运行期间被多次创建和销毁。
https://stackoverflow.com/questions/11283853
复制相似问题