C++类编译好后,成员变量存储在什么位置?代码区?
8个回答
展开全部
内存被他为栈区和堆区,程序的全局变量和局部变量这些数据是存放在栈中,因为一个子程序或函数调用结束后,函数或子程序使用的内存全被回收,这人实现的方法就是栈。函数在调用编译器会在栈中分配足够的空间,然后将数据全部压入栈中,等调用结束会自动清空栈,这样函数所使用的内存就消失了。
但我们知道动态内存是可以夸函数使用的,这是因为动态内存是分配在堆中,不受栈这个条件的限制,所以动态内存需要我们自己去释放,如果我们自己不释放就会造成内存泄漏,但操作系统会在程序结束后回收程序使用的所有内存。
至于代码区,数据区,栈区,这些在8086中是很重要的,这是因为8086CPU的问题。现在的32位CPU和16位CPU在对这些区的定义不一样。32位CPU可以不用去管这些区,但在进行32汇编时还是要需要,不同区会有不同的属性,但对程序的整体影响不大。
建议你去看罗云彬的win32汇编,这本书对这些说得很清楚,只是书有点厚,难懂。
但我们知道动态内存是可以夸函数使用的,这是因为动态内存是分配在堆中,不受栈这个条件的限制,所以动态内存需要我们自己去释放,如果我们自己不释放就会造成内存泄漏,但操作系统会在程序结束后回收程序使用的所有内存。
至于代码区,数据区,栈区,这些在8086中是很重要的,这是因为8086CPU的问题。现在的32位CPU和16位CPU在对这些区的定义不一样。32位CPU可以不用去管这些区,但在进行32汇编时还是要需要,不同区会有不同的属性,但对程序的整体影响不大。
建议你去看罗云彬的win32汇编,这本书对这些说得很清楚,只是书有点厚,难懂。
更多追问追答
追问
这些我都知道啊,但是你还是没回答类成员变量i会放在内存的什么位置?
追答
你认为一个变量会有一个固定的内存吗,内存地址是不固定的。如果你是想知道是在那一个区,肯定是在数据区,而且是在未初始化数据区。 因为代码区中的数据只能执行,不能修改,所以变量总么会在代码区,当然纯8086CPU代码段是可以改的,但32位的CPU是运行在保护模试下,没有特权是改不了的。另外类在没有创建对象时是不会分配内存的,所以不能在类的声明中初始化成员变量,所以类中的成员变量应该是放在内存的未初始化数据区中。
展开全部
类的非静态成员变量会放在哪个区,要根据什么时候定义该类的对象决定。如果对象定义在函数内,则放在栈中。如果是new的,则放在堆中。如果定义了静态对象,则放在静态区。跟普通的类型没有区别
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-04-24
展开全部
看对象使用哪种方式创建,如果对象在栈上的话,成员变量就是在栈上的。
如果对象动态创建的话,成员变量就在堆上
如果对象动态创建的话,成员变量就在堆上
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
类应该类似子函数的存在,实例化的对象分配内存是没有分配成员函数只分配成员变量内存
追问
沃茨,看明白题目了么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
内存地址分为堆和栈,heap, stack, 类的成员变量应该是放在堆中。
追问
堆存储的是对象成员,大哥,看一下题目好吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询