首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类的内存位置(参考C++对象模型书中的内容)

类的内存位置(参考C++对象模型书中的内容)
EN

Stack Overflow用户
提问于 2012-07-02 00:47:09
回答 2查看 1.5K关注 0票数 3

我目前正在阅读C++对象模型内部。在第9页,它有一个图表,展示了一个类的内容是如何在内存中布局的。它声明对象中唯一实际驻留在类内存中的部分是非静态数据成员。

这是一篇来自SO的关于程序内存内容的帖子:

Global memory management in C++ in stack or heap?

在第二个答案中,它详细描述了程序的内存布局--显示了堆栈和堆。

静态数据成员/任何类函数(基本上是类中未存储在对象中的部分-请参阅第9页)的位置是否会根据对象是在堆栈上还是在堆上而改变?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-02 00:52:48

静态数据成员与全局变量和普通静态变量驻留在同一个内存区域中。它是“类内存”,它可以在堆栈上,也可以在堆上,这取决于类的实例是如何创建的。

静态数据成员与全局变量没有太大区别。但是,它的作用域是由类名限定的,并且可以通过publicprivateprotected按名称控制它的访问。public为每个人提供访问权限。private将访问限制为仅访问类的成员,而protected类似于private,但将访问扩展到从具有静态数据成员的类继承的类。

相比之下,每个人都可以通过名称访问全局变量。普通静态变量可以通过同一源文件中的代码通过名称进行访问。

普通类方法实际上只是一个常规函数(取模访问控制),但它有一个隐式的this参数。它们不占用类中的任何空间。但是,virtual类方法将占用类中的一些内存,因为它必须解析为该方法的派生类实现。但是,多态可能还没有在你的教科书中涉及到。

票数 4
EN

Stack Overflow用户

发布于 2012-07-02 00:53:24

不会,变量的分配位置不会影响静态数据或代码的存储。它们通常存储在不同的内存区域中,这些区域既不是堆栈也不是堆。

函数和静态数据成员的特殊之处在于,它们在整个程序中只有一个副本。

类或其他类型的变量通常在程序运行期间被多次创建和销毁。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11283853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档