内存分区

内存分区

先将内存区域进行划分包括:代码段,全局变量区,栈,堆。

接下来让我们看看一些常见的内容分别位于哪个区域内,并对其生命周期、作用域、默认值、链接属性进行总结:

一.全局变量区:定义在函数外部的变量

位置:  函数外部

生命周期:从程序运行开始到程序销毁为止。

作用域:从定义该变量开始到文件结束为止。

默认值: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),在其中对所需函数进行声明。如下:

内存分区

后我们就可以在需要使用这个函数的源文件中引用这个头文件:

内存分区