【附代码】局部静态变量 和 全局变量释放顺序

      今天,因为工作需要,遇到一个可能很基础但是又比较模糊的知识点,局部静态变量和全局变量的释放顺序到底是怎么样的呢?

      开门见山的说,遵循先声明后释放原则。

      但是,怎么知道谁先声明的呢?全局变量声明定义放在 main 函数中的局部静态变量后面算不算后声明的呢?这里同样我先给出结论:对于全局变量的处理都是在 main 函数之前就进行的,而局部静态变量不用说,我们都知道至少得在 main 函数运行起来,才会进行处理。

      再次,我再强调一点:对于全局变量的处理与它声明定义所在的位置是没有关系的,即使它的声明位置是在 main 函数之后!这也是我为什么写这篇博客的缘由

     我在一些博客中看到有的测试代码还是不能证明对于全局变量的处理在 main 函数之前。于是我决定自测一下,前面两张图片是 VS2017 编译器的运行结果,后面两张图片是 Linux 下的运行结果,最终得到的结果是一致的,以下是我的代码和运行结果:

    首先,第一张图片,对于全局变量 a1, a2 的声明位置是在 main 函数中的静态变量 a3 之前的, 他们的释放顺序是 a3 -> a2 -> a1。

       下面的第二张图片中,注意, 全局变量 a1, a2 的位置,全局变量 a2 声明的位置是在 main 函数中的局部静态变量 a3 的后面,但是看运行结果,它们的释放顺序仍然是 a3 -> a2 -> a1。

       结论:编译器对于全局变量的处理总是在 main 函数执行之前的,而与全局变量的声明位置是没有关系的。

        附记:

        其实对于上面的结论再进一步思考一下,就会觉得理所应当的嘛,不然怎么叫全局变量的~~这个结论给我们的印象应该是 全局变量 和 局部变量 就像是两个独立的阶层一样,上阶层即使是最后面的,但是他们的优先级也要比下阶层的要高,这就好比最近的国漫斗破苍穹中的斗者 和 斗师一样,最低的一星斗师也要比九星斗者等级要高,话说,一星期一集,都已经第三季都已经更新完了,三年之约还是没到。再比如国漫斗罗大陆中的魂宗和魂王一样,哈哈哈~这两个都不错,都是中学是看完小说,现在看动漫追忆,这两个国漫拍的都不错。

       下面是我在 Linux 下测试的结果,跟 VS2017 下运行的结果都是一样,所以就不在赘述了。

 

     如果本文还存有什么漏洞或疑问,欢迎指正。

 

 

 

 

 

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值