动态存储变量和静态存储变量

来源:互联网 发布:菜鸟程序员 编辑:程序博客网 时间:2024/05/22 08:17
<一>

所谓静态存储方式是指在程序运行期间分配固定的存储空间的方式。

而动态存储方式则是在程序运行期间根据需要进行动态的分配存储空间的方式。
内存中供用户使用的存储空间分为三类:
1.程序区
2.静态区 
3.动态存储区
数据分别存放在静态存储区和动态存储区。
在函数体内部定义的变量是局部变量,而在函数之外定义的变量称为外部变量,外部变量是全局变量。
全局变量(又称为外部变量)存放在静态存储区中,程序开始执行时给全局变量分配存储区,程序执行完毕就释放,在程序运行过程中他们占据着固定的存储单元,而不是动态的分配和释放的。

<二>
动态存储区中存放着以下数据:
1)函数形参变量。
2)局部变量(又称为内部变量,也叫自动变量)。局部静态变量属于静态存储类别。局部静态变量:在函数内部定义的变量前面加上static关键字,局部静态变量是在编译的时候赋初值的,即只赋初值一次,在程序运行时他已有初值,以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。
3)函数调用时的现场保护和返回地址

<三>
    一般情况下变量的值是存放在内存中的,当程序中用到哪一个变量的指时,由控制器放出指令将内存中该变量的值送到运算器中,经过运算器进行计算,如果需要存数,再从运算器将数据送到内存进行存放。如果有一些变量使用频繁(例如,在一个函数中执行10000次循环,每次循环中都要引用某局部变量),则为存取变量的值要花不少的时间。为了提高执行效率,允许将局部变量的值放在运算器的寄存器中,需要时直接从寄存器取出参加运算,不必到内存中去存取,这样提高了效率,这种变量叫做寄存器变量

<四>
    一个程序可以由一个或多个源程序文件组成,如果程序只由多个源文件组成,一个文件中的函数要引用另一个文件中的全局变量,则存在以下两种:
1)如果在一个文件中要引用在另一个文件中定义的全局变量,应该在需要引用它的文件中,用extern作说明。
2)有时在程序设计中希望某些全局变量只限于被本文件引用而不能被其他文件引用,这是可以在定义外部变量时前加上一个static说明,这种变量也称为静态外部变量。无论是加static的外部变量还是不加static的外部变量都是存放在静态存储区。
原文:http://blog.sina.com.cn/s/blog_60e96a410100kxv0.html