普通全局变量:
1.生命周期:程序开始运行是创建,程序结束时才销毁
2.作用域:定义开始直到本源文件结束,(不安全)普通全局变量的作用域是整个源程序,当一个源程序由多个原文件组成 时,普通的全局变量在各个源文件中都是有效的。如果想在别的文件中访问可以加上extern声明 https://www.cnblogs.com/mch0dm1n/p/5727667.html(extern知识??)
3.默认值:为0
4.连接属性:外部
5.内存区域:全局区
静态全局变量:
static全局变量初始化语句只执行一次一次
1.生命周期:程序开始运行是创建,程序结束时才销毁
2.作用域:定义开始直到本文件结束,(不安全)而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在 同一源程序的其它源文件中不能使用它。静态全局变量就是用来解决重名问题的
3.默认值:为0
4.连接属性:内部
5.内存区域:全局区
普通局部变量:
1.生命周期:进入函数时创建,函数结束时销毁
2.作用域:本函数内有效
3.默认值:随机值
4.连接属性:无
5.内存区域:栈
静态局部变量:
1.生命周期:进入函数时创建,函数结束时销毁
2.作用域:不死 ??
3.默认值:为0
4.连接属性:无
5.内存区域:全局区
动态内存:
1.生命周期:通过malloc函数创建,free释放
2.作用域:能获得就能用
3.默认值:随机
4.连接属性:无
5.内存区域:堆
普通函数:
1.生命周期:
2.作用域:对于可在当前源文件以外使用的函数应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。
3.默认值:无
4.连接属性:无
5.内存区域:代码段
静态函数:
1.生命周期:
2.作用域:只在当前源文件中使用的函数
3.默认值:无
4.连接属性:无
5.内存区域:代码段
static函数与普通函数最主要区别是static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝程序的局部变量存在于(栈)中
对于一个完整的程序:内存分布有如下几个区、栈区、堆区、全局区、常量区、代码区。