当前位置:网站首页>全局变量&局部变量

全局变量&局部变量

2022-06-25 06:38:00 芯辰大海

作用域:

    全局变量:其作用范围是“整个工程”,只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量
    静态全局变量:使用 static 关键字修饰,也具有全局作用功能,和全局变量区别在于如果该程序包含多个文件,其作用范围仅在定义的那个文件,不能作用于其它文件,这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量
    局部变量:仅仅从定义的位置开始,到定义它的右花括号结束,只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回
    静态局部变量:局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,和局部变量的区别在于函数执行完也还存在

生存期:

    全局变量:随进程持续性
    静态全局变量:随进程持续性
    局部变量:从定义开始到函数结束,函数调用后变量就被撤销,内存被回收
    静态局部变量:随进程持续性,static 修饰的局部变量其生存期从函数变为整个进程

内存分配:

    全局变量:全局(静态)存储区
    静态全局变量:全局(静态)存储区
    局部变量:存放在栈中,只有在所在函数被调用时才动态地为变量分配存储单元
    静态局部变量:全局(静态)存储区

其它:

    全局(静态)存储区:分为DATA段和BSS段。DATA段(全局初始化区)存放初始化的全局变量和静态变量;BSS段(全局未初始化区)存放未初始化的全局变量和静态变量。程序运行结束时自动释放。其中BBS段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0
    静态变量会被放在程序的静态数据存储区(全局可见)中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别
    变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别
    把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的;
 

原网站

版权声明
本文为[芯辰大海]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_42322256/article/details/125412731