内存分区
先将内存区域进行划分包括:代码段,全局变量区,栈,堆。
接下来让我们看看一些常见的内容分别位于哪个区域内,并对其生命周期、作用域、默认值、链接属性进行总结:
一.全局变量区:定义在函数外部的变量
位置: 函数外部
生命周期:从程序运行开始到程序销毁为止。
作用域:从定义该变量开始到文件结束为止。
默认值:0
内存区域:全局静态变量区
全局变量可以在其他的源文件中使用,例如:
首先在test_01 中定义一个全局变量a,并将其赋值为50
然后在另一个源文件test_02中,我们可利用extern 来使用全局变量 a。
注:extern 是计算机语言中的一个关键字,可置于变量或者函数前,以表示变量或者函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其它模块中寻找其定义,另外,extern也可用来进行链接指定。
可以顺利运行
二.静态全局变量区:
生命周期:从程序运行开始创建,程序结束销毁
作用域:从定义该变量开始,一直到文件的结束
默认值:0,
内存区域:全局(静态)变量区
链接属性:内部
在全局变量的前面加上static就是静态变量,静态全局变量有以下特点:
1.不用担心其他原文件使用同名
2.本文件中定义的静态变量不能被其他文件使用
三.定义在函数内部的变量,包括形参
生命周期:进入函数时创建,函数退出时销毁
作用域:只在函数内部有效
默认值:随机值
内存区域:栈
链接属性:无
局部变量在它的生命周期结束时,它的内存也随之消失,再次使用时再次申请空间,并且每次重新定义和初始化。
四.局部静态变量
生命周期:第一次进入函数时创建,程序结束时销毁
作用域:只在函数内部有效
默认值:0
内存区域:全局(静态)变量区
链接属性:——
静态局部变量所在的函数在多调用多次时,只有第一次才经历变量定义和初始化,以后多次在调用时不再定义和初始化,而是维持之前上一次调用时执行后这个变量的值。本次接着来使用。静态局部变量的这种特性,和全局变量非常类似。它们的相同点是都创造和初始化一次,以后调用时值保持上次的不变。不同点在于作用域不同。
五.动态内存
生命周期:调用动态内存创建函数时创建,free时销毁
作用域:在未free该动态内存前,只要获得该动态内存的首地址就可以使用
默认值:——
内存区域:堆
链接属性:——
六.函数
如果要从其他文件调用函数可以用extern,前提是该函数不是static函数。
如:
test_01 中定义了一个 add 函数,接下来在test_02中引用它:
还有一种方法就是自己创建一个头文件(add .h),在其中对所需函数进行声明。如下:
后我们就可以在需要使用这个函数的源文件中引用这个头文件: