我们知道计算机最大的功能是处理数据,字符串是数据,变量是数据,图片是数据,声音和视频也是数据。为了方便处理,节省空间,提高效率。计算机把数据分为静态和动态,静态数据包括数值型、string型、常量等,动态数据包括函数、对象等。数据的处理是在内存中进行的,那么是不是这么多类型的数据都在一起处理那?当然不是,内存储存或处理不同的数据有不同的分区。
内存存储数据可以分为四个分区: 代码区、数据区、堆区、和栈区。
所有函数(包括主函数、非主函数、各类中的成员函数)通常存放在代码区。
全局变量和所有静态(内部和外部)变量通常存放在数据区。
所有函数中的局部变量 、函数参数、所有通用寄存器、返主地址等通常在该函数被调用时,被存放在栈区。
使用new,malloc所分配的空间被存放在内存的堆区。堆是大家共有的空间,分为全局堆和局部堆。全局堆就是所有没有分配的空间,堆在操作系统对进程初始化时分配,运行时也要想系统要额外的堆,但是用完了一定要记得还给操作系统,不然会发生内存的泄露。
堆和栈在c++中的应用。
1、c++中的对象都是存放在堆中的,所在在对象创建后(new)一定记得清除(delete)
2、堆区的存储对象
主要存储动态申请的空间。在C++中,存储“new出来”的对象,如下程序段
int *a;
a = new int;
*a = 1;
其中变量a存储的值为1,1的存储地址在堆区,即指针a所指向的那个对象的存储地址是在堆区,但是要注意的是指针a本身所存储的区域是在栈区。指针是一个变量,变量按说应该存放在数据区,为什么在栈区还在探索中.....
总结:计算机的知识都是想通的,要想自己的知识结网,要系统的学习。在学习一门知识的时候要有深度,也有广度。