7.6 变量的存储和引用与内部和外部函数

7.6.1 变量的存储类别

7.5节讲解了局部变量和全局变量,这是从变量的作用域角度来划分。如果换一个划分角度,从变量存在的时间(生存期)角度来划分,则可以划分为“静态存储变量”和“动态存储变量”,从而就引出了“静态存储方式”和“动态存储方式”。看看这两个概念。

(1)静态存储方式:在程序运行期间分配固定的存储空间的方式。

(2)动态存储方式:在程序运行期间根据需要进行动态的分配存储空间的方式。

看一看程序在内存中存储空间图,如图7.12所示。

图7.12 程序在内存中存储空间图

从图7.12中可以看到,存储空间分成三个主要部分:程序代码区、静态存储区和动态存储区。程序执行所需的数据就放在静态存储区和动态存储区中,存储区就理解成内存。

全局变量(在函数的外部定义的)放在静态存储区中,程序开始执行时给全局变量分配存储区,程序执行完毕后释放这些存储区。在程序执行过程中它们占据固定的存储单元,而不是动态地分配和释放。

那么动态存储区中存储哪些数据呢?

(1)函数形参,前面说过,函数形参被看作局部变量。

(2)局部变量,如函数内定义的一些变量。

(3)函数调用时调用现场的一些数据和返回地址等。

一般来说,这些数据在函数调用开始时分配存储空间,函数调用完毕后这些空间就被释放掉了(也称为回收)。这种分配和释放就认为是动态的,如果两次调用同一个函数,分配给此函数的局部变量的存储空间地址可能是不同的。