首先说明一下堆和栈,栈(英文名称是stack)是系统自动分配空间的。而堆(英文名称是heap)则是程序员根据需要自己申请的空间。
堆上的内存空间是程序运行时维护的,栈是在编译时就确定的。 所以,我们可以int* p=new int[n],而不能int a[n](n为变量)。
存储空间类型: 栈(stack): 自动分配和清除的变量.如:局部变量和函数参数等
堆(heap): new得出来的空间。
全局/静态存储区:存储全局变量和静态变量。
常量存储区:存储常量,不可以修改。
存储空间的排布由操作系统决定(依赖于操作系统怎么规定自己的可执行文件的格式)
| 类型 | 补充 | 作用域 | 存在期 | 初始化 |
外部定义(函数外面) | 全局变量(外部变量) | 为了后定义先使用:可用extern外部变量说明. | 全局 | 全程 | 一次初始化 |
静态外部变量 |
| 文件 | 全程 | ||
外部数组 |
| 全局 | 全程 | ||
静态函数 |
| 文件 | n/a | n/a | |
普通函数 |
| 全局 | n/a | n/a | |
内部定义(函数里面) | 静态局部数组 |
| 局部 | 全程 | 一次初始化 |
静态局部变量 | 在函数外只能赋一次值 | 局部 | 全程 | 一次初始化 | |
普通局部变量(自动变量) |
| 局部 | 局部 |
|