内存被他为栈区和堆区,程序的全局变量和局部变量这些数据是存放在栈中,因为一个子程序或函数调用结束后,函数或子程序使用的内存全被回收,这人实现的方法就是栈。函数在调用编译器会在栈中分配足够的空间,然后将数据全部压入栈中,等调用结束会自动清空栈,这样函数所使用的内存就消失了。
但我们知道动态内存是可以夸函数使用的,这是因为动态内存是分配在堆中,不受栈这个条件的限制,所以动态内存需要我们自己去释放,如果我们自己不释放就会造成内存泄漏,但操作系统会在程序结束后回收程序使用的所有内存。
至于代码区,数据区,栈区,这些在8086中是很重要的,这是因为8086CPU的问题。现在的32位CPU和16位CPU在对这些区的定义不一样。32位CPU可以不用去管这些区,但在进行32汇编时还是要需要,不同区会有不同的属性,但对程序的整体影响不大。
建议你去看罗云彬的win32汇编,这本书对这些说得很清楚,只是书有点厚,难懂。
类的非静态成员变量会放在哪个区,要根据什么时候定义该类的对象决定。如果对象定义在函数内,则放在栈中。如果是new的,则放在堆中。如果定义了静态对象,则放在静态区。跟普通的类型没有区别
看对象使用哪种方式创建,如果对象在栈上的话,成员变量就是在栈上的。
如果对象动态创建的话,成员变量就在堆上
类应该类似子函数的存在,实例化的对象分配内存是没有分配成员函数只分配成员变量内存
内存地址分为堆和栈,heap, stack, 类的成员变量应该是放在堆中。