静态存储区与全局变量

Posted dabing0983

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态存储区与全局变量相关的知识,希望对你有一定的参考价值。

接下来说存储类说明符的第二个知识点——静态变量,它包括三种:全局变量/外部变量,静态全局变量,静态局部变量

非常重要!工作中必用。接近于底层的一个理解。

特点:

静态变量存储在静态区/静态全局区/静态存储区,因为内存区域分5个区:堆区,栈区,字符常量区,静态区,代码区。

 

这个内存区域有什么特点?我们知道栈区的特点是 :变量的申请与释放都是由操作系统帮我们管理的,而且变量的生命周期在它的作用域结束的时候,就放掉了。

静态存储区的特点:

1 静态存储区的变量/我们申请的空间 会自动初始化为0。不管是int a,你定义好了这个a之后,也不用去初始化,a里面的值就是0.你定义一个指针 int * p,p里面就是NULL. 你定义一个结构体,有多个成员,每个成员都是0.定义一个数组,数组的所有成员都被初始化为0.

2.生命周期与程序共存亡。

像栈区的局部变量,它的作用域就是这个变量所在的{}范围内,从它定义的这一行开始直到{}结束,这么一个区域。

而静态变量是与程序共存亡的,从它创建开始到软件关闭,这块空间才会释放。

3.静态存储区的静态变量在程序运行的时候,在加载资源阶段分配空间

解释一下"加载资源阶段分配空间":一个程序执行入口是主函数,当软件一打开的时候,不会直接执行主函数的,是要加载一些资源,也就是软件要运行所必要的资源,加载到内存。 

资源加载完了,软件运行的环境就相当于搭建好了,资源加载完了,开始执行主函数。

 即使说静态变量定义在主函数里面了,这个变量依然是在程序加载的阶段申请空间

 

 

 

全局变量 :

位置:写在全局的位置。?!

技术图片

技术图片

 

只要不在任何函数内,就叫 全局变量。

 全局变量会自动初始化为0.

技术图片

当然也可以手动初始化成 想要的值。

技术图片

当全局变量与局部变量重名,在局部位置,局部变量有效

 

以上是关于静态存储区与全局变量的主要内容,如果未能解决你的问题,请参考以下文章

全局变量 静态变量 局部变量 啥时候创建 啥时候撤销

静态存储变量STATIC有啥用举个例吧,好像和全局变量还有些联系啊

静态变量全局变量和局部变量

static作用(修饰函数局部变量全局变量)

全局变量和局部变量

java之static变量与全局局部变量的区别