动态存储方式与静态存储方式
从变量的作用域(即从空间)角度来分,可以分为全局变量和局部变量。可以从另一个角度,从变量值存在的时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式。
所谓静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式。而动态存储方式则是在程序运行期间根据需要进行动态的分配存储空间的方式。
先看一下内存中的供用户使用的存储空间的情况。这个存储空间可以分为三部分:
- 程序区
- 静态存储区
- 动态存储区
数据分别存放在静态存储区和动态存储区中。全局变量全部存放在静态存储区中,在程序开始执行时给全局变量分配存储区,程序执行完毕后就释放。在程序执行过程中它们占据固定的存储单元,而不是动态地进行分配和释放。
在动态存储区中存放以下数据:
- 函数形式参数。在调用函数时给形参分配存储空间。
- 自动变量(未加static声明的局部变量)
- 函数调用时的现场保护和返回地址等。
对以上这些数据,在函数调用开始时分配动态存储空间,函数结束时释放这些空间,在程序执行过程中,这种分配和释放时动态的,如果在一个程序中两次调用同一个函数,分配此函数中局部变量的存储空间地址可能是不相同的。如果一个程序包含若干个函数,每个函数中的局部变量的生存期并不等于整个程序的执行周期,它只是程序执行周期的一部分。根据函数调用的需要,动态地分配和释放存储空间。
在C语言中,每一个变量和函数有两个属性:数据类型和数据的存储类别。对数据类型(如整型、字符型等)。存储类别指的是数据在内存中存储的方式。存储方式分为两大类:静态存储类和动态存储类。具体包含4种:自动的(auto)、静态的(static)、寄存器(register)、外部的(extern)。根据变量的存储类别,可以知道变量的作用域和生存期。