C++类编译好后,成员变量存储在什么位置?代码区?

一个类不是被编译完了,然后装入内存,这个成员变量i会放在内存的什么位置?代码区还是栈区?... 一个类不是被编译完了,然后装入内存,这个成员变量i会放在内存的什么位置?代码区还是栈区? 展开
 我来答
不懂多来问问
2013-08-24 · TA获得超过2591个赞
知道小有建树答主
回答量:474
采纳率:0%
帮助的人:423万
展开全部
内存被他为栈区和堆区,程序的全局变量和局部变量这些数据是存放在栈中,因为一个子程序或函数调用结束后,函数或子程序使用的内存全被回收,这人实现的方法就是栈。函数在调用编译器会在栈中分配足够的空间,然后将数据全部压入栈中,等调用结束会自动清空栈,这样函数所使用的内存就消失了。
但我们知道动态内存是可以夸函数使用的,这是因为动态内存是分配在堆中,不受栈这个条件的限制,所以动态内存需要我们自己去释放,如果我们自己不释放就会造成内存泄漏,但操作系统会在程序结束后回收程序使用的所有内存。
至于代码区,数据区,栈区,这些在8086中是很重要的,这是因为8086CPU的问题。现在的32位CPU和16位CPU在对这些区的定义不一样。32位CPU可以不用去管这些区,但在进行32汇编时还是要需要,不同区会有不同的属性,但对程序的整体影响不大。
建议你去看罗云彬的win32汇编,这本书对这些说得很清楚,只是书有点厚,难懂。
更多追问追答
追问
这些我都知道啊,但是你还是没回答类成员变量i会放在内存的什么位置?
追答
你认为一个变量会有一个固定的内存吗,内存地址是不固定的。如果你是想知道是在那一个区,肯定是在数据区,而且是在未初始化数据区。  因为代码区中的数据只能执行,不能修改,所以变量总么会在代码区,当然纯8086CPU代码段是可以改的,但32位的CPU是运行在保护模试下,没有特权是改不了的。另外类在没有创建对象时是不会分配内存的,所以不能在类的声明中初始化成员变量,所以类中的成员变量应该是放在内存的未初始化数据区中。
解决提出问题的人民
2015-05-21
知道答主
回答量:31
采纳率:0%
帮助的人:5.1万
展开全部
类的非静态成员变量会放在哪个区,要根据什么时候定义该类的对象决定。如果对象定义在函数内,则放在栈中。如果是new的,则放在堆中。如果定义了静态对象,则放在静态区。跟普通的类型没有区别
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-04-24
展开全部
看对象使用哪种方式创建,如果对象在栈上的话,成员变量就是在栈上的。

如果对象动态创建的话,成员变量就在堆上
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cppqingyuan
2013-08-24 · 超过44用户采纳过TA的回答
知道答主
回答量:154
采纳率:0%
帮助的人:105万
展开全部
类应该类似子函数的存在,实例化的对象分配内存是没有分配成员函数只分配成员变量内存
追问
沃茨,看明白题目了么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chouchouNUDT
2013-08-24 · TA获得超过1706个赞
知道小有建树答主
回答量:2954
采纳率:50%
帮助的人:1038万
展开全部
内存地址分为堆和栈,heap, stack, 类的成员变量应该是放在堆中。
追问
堆存储的是对象成员,大哥,看一下题目好吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式