对于一个完整的程序,在内存中的分布情况如下图:
代码区 //low address
全局数据区
堆区
栈区 //high address
一般程序把新产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。自动变量一般会随着函数的退出而释放空间,静态数据(即使是函数内部的静态局部变量)也存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放空间。
四种变量主要从以下两点区分
一、生存期,即存储方式
全局变量、静态全局变量、静态局部变量都存放在内存的静态存储区域;
局部变量存放在内存的栈区。
二、作用域
全局变量在整个工程文件内都有效;
静态全局变量只在定义它的文件内有效;
静态局部变量只在定义它的函数内有效,并且程序仅分配一次内存,函数返回后,该变量不会消失;
局部变量在定义它的函数内有效,但是函数返回后失效。
从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。