堆区(heap): 手动分配的内存,如malloc/new/free/delete,一般由程序员分配释放(动态内存申请与释放),若程序员不释放,程序结束时可能由操作系统回收。
栈区(stack): 程序的局部变量;由编译器自动分配释放,存放函数的参数值,局部变量的值等。
全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区 域,该区域在程序结束后由操作系统释放。
常量区: 字符串常量和其他常量的存储位置,程序结束后由操作系统释放。
程序代码区: 存放函数体的二进制代码。
函数1调用函数2,函数1称为主调函数,函数2称为被调函数。
规则1:Main(主调函数)分配的内存(在堆区,栈区、全局区)都可以在被调用函数里使用
规则2:在被调用函数里面分配的内存
1、如果在被调用函数里面的临时区(栈)分配内存,主调用函数是不能使用的。
学习的几大重点问题:
函数内元素:
深入理解数据类型和变量“内存”属性;
一级指针内存分布图(int *,char *);
二级指针内存分布图(int **char **)
函数间接:
主调函数分配内存,还是被调用函数分配内存;
主调函数如何使用被调用函数分配的内存(技术关键:指针做函数参数);