【附代码】局部静态变量 和 全局变量释放顺序_控制静态变量释放顺序_William_Tuo的博客-程序员秘密

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

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

      但是,怎么知道谁先声明的呢?全局变量声明定义放在 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 下运行的结果都是一样,所以就不在赘述了。

 

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

 

 

 

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/William_Tuo/article/details/101709509

智能推荐

SecureCRT 使用配置详细图文教程_securecrt文件传输_fan_balalld的博客-程序员秘密

转:https://www.linuxidc.com/Linux/2015-01/112172.htmSecure CRT是一款支持 SSH2、SSH1、Telnet、Telnet/SSH、Relogin、Serial、TAPI、RAW 等协议的终端仿真程序,最吸引我的是,SecureCRT 支持标签化 SSH 对话,从而可方便地管理多个 SSH 连接,设置项也极为丰富。简单的说是Windows下...

财务模块 - 采购、接收、应付会计分录和功能认识_alongsun的博客-程序员秘密

一、企业采购业务采购业务是一般企业都会有的业务,主要包括请购、采购、接收、入库、发票、付款几个步骤。分别对应采购、库存、成本、应付以及总账模块。Oracle是财务业务一体化的系统,只要录入了相应的业务,则会自动生成相应的财务信息。1、采购接收采购模块主要功能是帮助业务部门管理采购订单,控制采购流程,审批层次,在请购单、和采购订单录入审批阶段是不产生财务信息的。现假设企业采购两批原材料,价格...

openstack上传镜像的三种方式,两种底层上传和dashboard上传、glance image-create上传报错_openstack上传镜像命令_/*守护她的笑容的博客-程序员秘密

1.登录控制节点任意一台服务器,将镜像上传到此节点 (建议所有镜像都存放统一路径,路径可以自定义,也可以新建一个文件用来存放镜像)注:上传镜像用任意方式都行,crt或者其他工具!!!2.编写上传脚本[[email protected] ~]# vi uplod.sh #!/bin/bash glance image-create --name \$1 --file \$2 --disk-format raw --container-format bare --visibility public --

什么是Android PendingIntent?_asdfgh0077的博客-程序员秘密

我是Android的新手。 我阅读了Android文档,但我仍需要进一步澄清。 任何人都可以告诉我PendingIntent究竟是什么?

R语言学习笔记(十七):data.table包中melt与dcast函数的使用_aiairen0123的博客-程序员秘密

melt函数可以将宽数据转化为长数据dcast函数可以将长数据转化为宽数据> DT = fread("melt_default.csv")> DT family_id age_mother dob_child1 dob_child2 dob_child31: 1 30 1998-11-26 2000-01-29 N...

决策树中的类别特征问题(关于label encode还是one-hot的讨论)_labelencode_a flying bird的博客-程序员秘密

就决策树来说,算法本身是(为数不多的)天然支持categorical feature的机器学习算法,但是如果是high cardinality,那么理论上最优的split要遍历所有二分组合,是指数级的复杂度,Python的implementation只解决数值型feature,把这个难题丢给用户了,xgboost也是一样,作者的解释是为了给用户更多自主权决定如何处理categorical feat...

随便推点

PyCharm安装教程(配置两个解释器)_pycharm解释器怎么安装_ThetaQing的博客-程序员秘密

有的时候我们会需要访问其他文件夹下的函数,简单地说就是需要访问其他自定义的包,如果项目较大的话,在每个文件下添加import syssys.path.append("包的上一级绝对路径")就会显得很麻烦,而且也不适合移植,所以,我们可以选用在PyCharm中直接将这个路径作为环境变量就省事多了。1、在PyCharm中选择那个文件夹...

ESP32S3 vscode 使用 system view工具调试_esp32 vscode调试_ben298519的博客-程序员秘密

esp32内置记录systemview兼容的跟踪信息代码,开启这个功能后通过OpenOCD可在工程文件夹内导出跟踪信息文件。systemview是通过jlink工具可直接对arm内核单片机实时调试和录制,可以直观的看到rtos系统中各线程的运行逻辑,方便查看rtos多线程编程时各个线程的运行情况是否按照预期运行。8. 用systemview打开这两个文件,esp32S3是双核的所以会有两个内核的追踪信息文件,一般应用程序追踪信息都在。到这里就可以分析刚才录制的文件中各个线程的运行以及切换信息了。

yolov5训练自己的数据集(一文搞定训练)_yolov5训练结果分析_小屋*的博客-程序员秘密

目录1 yolov51.1 环境配置2 数据集制作1 yolov51.1 环境配置2 数据集制作首先建立一个自己的数据文件夹:mycoco其目录结构如下:mycoco├── Annotations├── images├── ImageSets├── labels├── make_txt.py└── voc_label.py其中images文件夹下放置所有图片,Annotations文件夹下放置所有与之对应的xml文件。make_txt.py文件是用来划分数据集使用,内容如下:

802.11a data rate_802.11 卷积编码_Wi-Fi研习者的博客-程序员秘密

这里整理的主要还是以802.11a作为一个例子,整理了其计算物理层速率的方法(这个计算方法可以延伸到802.11n基础的模式,802.11n/ac中需要再目前的计算方法前面好像要还要乘以两个参数:有关信道带宽之类,所以就暂时不加以展开,仅仅用802.11a作为一个例子)。

MySql 存储boolean的数据_mysql怎么存boolean_码农娟的博客-程序员秘密

开发过程中遇到这个问题,纪录下来了首先,问了下度娘,得到如下结论:mysql是不支持boolean类型的,基本数据类型不包括boolean类型.当把一个数据设置成boolean类型的时候,数据库会自动转换成tinyint(1)的数据类型,默认值是1,0两种,分别对应了boolean的true(1)和false(0).生成实体类后,对应tinyint(1)的数据类型的字段,是Integer的;如果在POJO中需要定义成Boolean类型映射Mysql中的tinyint(1)类型.insert数据.

WCF 大数据传输问题_安安你懂得的博客-程序员秘密

当客户端传输的参数中有字节流或者是长度过大的时候,wcf就会报错。出现maxReceivedMessageSize异常解    当使用WCF的客户端调取的数据过多时,会出现这个异常。一般情况下,系统默认值是65536,大约容纳100-200条左右的数据。那么就需要我们手动改参数WebConfig配置文件 ,以下就是我防止传输参数过大做的配置。下面一一讲解

推荐文章

热门文章

相关标签