软考
APP下载

static全局变量与全局变量的区别

全局变量是指定义在函数外部、类外部或文件顶部的变量,能够在程序的任何地方进行访问。而static全局变量,也称为局部静态变量,一般指定义在函数内部、文件顶部或类内部被声明成static类型的变量,它们仅能在定义它们的函数内部进行访问。接下来,本文将从多个角度对两者进行比较分析。

1. 存储方式

全局变量和static全局变量在存储方式上有所不同。全局变量在程序启动时就被分配了固定的内存空间,且在整个程序运行期间都不会释放,因此会对程序的可执行文件大小产生一定的影响。而static全局变量只有在程序首次进入定义该变量的函数时才会被初始化,且紧跟着会在静态区分配内存,并且在程序中只有一份副本,所以它比全局变量更加高效。

2. 生命周期

不同类型的全局变量在程序中的生命周期也有所不同。全局变量的生命周期与程序的生命周期一致,即从程序启动到程序结束,全局变量一直保持存在。而static全局变量的生命周期只在定义该变量的函数执行期间存在,当函数执行完毕后,该变量就会被销毁。

3. 可见性

在程序中进行访问时,全局变量能够被任何函数或对象访问,即具有全局的可见性;而static全局变量仅能被定义该变量的函数进行访问,即只有函数内部具有可见性。这也使得使用static全局变量相对于使用全局变量更为安全,因为在其它函数或对象中无法直接对其进行修改。

4. 初始化设置

全局变量和static全局变量的初始化方式不同。全局变量会被编译器初始化为0或者指定的值,即在程序启动时,全局变量已经被初始化,因此全局变量可以在声明的时候不进行初始化。而static全局变量未被初始化时,其值是随机的,程序第一次使用这个变量时,才将初值0赋给变量,因此,static全局变量必须在函数内定义时进行初始化。

5. 特殊性质

static全局变量相比全局变量还具备一些特殊的性质。首先,static全局变量对外不可见,而仅在定义该变量的函数中使用。其次,static关键字能够把变量控制在狭小的范围内,这样在不同的函数中使用相同名称的变量也不会发生冲突。最后,static全局变量在某些情况下可以作为全局变量的替代品,来确保程序的安全性和可读性。

备考资料 免费领取:软件设计师报考指南+考情分析+思维导图等 立即下载
真题演练 精准解析历年真题,助你高效备考! 立即做题
相关阅读
软件设计师题库