将整个数据区分为四部分:栈区、堆区、常量区、全局及静态存储区
1.栈区:存储函数参数 以及局部变量,数据空间由编译器负责分配和回收。栈默认只有几M的空间,且生长方式向下,向着内存地址减小的方向消耗空间
2.堆区:存储动态分配的内存块,由程序员进行分配和回收,如果程序始终没有主动释放动态分配的内存,在程序运行结束时,操作系统会回收这部分空间。堆有几G的空间大小,生长方式向上,向着内存地址增大的方向消耗存储空间。
3.常量区:用于存放字符串常量,对字符串赋值时,在常量区开辟一部分空间存放字符串常量,返回这块内存的首地址。
如: char *p="abc”; abc存在常量区,p存在于栈区,p存储的是“abc”的首地址。
4.全局及静态:存储全局变量及静态变量,生命周期在程序运行期间始终存在,在程序结束时操作系统来回收这部分空间。