C语言中的变量与内存四区
1. 内存四区
C语言编程必须要对系统的内存情况了解清楚才高效的编程,下图是可执行文件在内存中的分布
2. 变量
定义形式 | 作用范围 | 生命周期 | 存储区域 | |
---|---|---|---|---|
普通局部变量 | 在{}里面定义的普通变量 | 离它最近的{}之间有效 | 离开{}的局部变量系统会自动回收 | 栈区 |
普通全局变量 | 定义在函数外边的变量 | 当前源文件都有效 ,其它源文件使用全局变量时必须加extern声明 | 整个进程都有效(程序结束时,全局变量才被释放) | 全局区 |
静态局部变量 | 在{}中定义,前面必须加static修饰 | 离它最近的{}之间有效 | 整个进程(程序结束时,静态局部变量才被释放) | 全局区 |
静态全局变量 | 在函数外边定义,同时加上static修饰 | 当前源文件有效,不能在其他源文件中使用 | 整个进程都有效(程序结束时,静态全局变量才被释放) | 全局区 |
2.1 普通局部变量
注意事项:
- 普通局部变量不初始化内存不确定
- 普通局部变量同名就近原则
2.2 普通全局变量
注: extern 本质: 告诉编译器 变量/函数 来至其它源文件,请通过编译
2.3 静态局部变量
- 全局区的内容的生命周期都是整个进程
- 静态局部变量常用于统计函数调用次数!!