全局变量在程序运行之前就已经分配了内存空间,程序结束后才释放内存空间;而局部变量在函数调用时才分配内存,在函数结束时释放内存。因此,全局变量的生命周期要比局部变量长。
另外,对于静态全局变量而言,它的内存空间只分配一次,程序运行期间一直占用这个空间,并不释放。而静态局部变量的内存空间也只分配一次,在该函数执行结束前一直占用这个空间。
全局变量的作用域是整个程序,可以在任何函数中被访问;而局部变量只能在定义它的函数内直接访问。
需要注意的是,同名的全局变量和局部变量同时存在时,局部变量的作用域优先于全局变量。也就是说,在函数内部,如果有和全局变量同名的局部变量,那么访问该变量时会优先访问局部变量而非全局变量。
全局变量存储在静态存储区,也就是数据段,和代码段、常量区一起,静态存储区的值在程序运行期间一直存在。
而局部变量存储在栈区,每个函数调用时都会给其分配一块内存,在函数结束时再释放,因此栈上的变量生命周期很短。
局部变量属于栈上的内存,存储和访问速度比较快,对性能影响较小。而全局变量的内存访问相对较慢,因为它的内存位置可能不在 CPU 的高速缓存中,而需要从内存中取出才能进行访问。所以,过多的全局变量会对程序的性能产生影响。