大家好,今天小编关注到一个比较有意思的话题,就是关于c语言回收栈的问题,于是小编就整理了3个相关介绍c语言回收栈的解答,让我们一起看看吧。
- C语言中,函数的返回值返回到main函数后,赋予给一个变量,之后就被回收了吗?还有哪些编程细节需要注意?
- 有没有回收旧衣服的机构?有没有回收旧衣服的?
- Spring管理单例对象的时候,如何实现不被JVM回收的?
C语言中,函数的返回值返回到main函数后,赋予给一个变量,之后就被回收了吗?还有哪些编程细节需要注意?
简单的说:
函数的返回值在函数返回时有效
(图片来源,侵删)函数内的局部变量,退出函数时立刻失效
相应的,要注意:
根据所用编译器和CPU的不同,以及返回值数据类型的不同,C语言中的函数返回值可能通过寄存器传递,也可能通过栈传递。对大多数CPU和编译器来说,出于性能考虑,能使用寄存器传递的,尽量使用寄存器传递,只有当寄存器不够用的时候,才会通过栈传递。
针对这两种情况,我分别举个x64 + GCC环境下的例子来说明。
我们看下x64/GCC下面对应的汇编代码:
test函数中的
1129: mov $0x2,%eax
便是把返回值2存放到eax寄存器中。而main函数中的
113d: callq 1125 <test>
1142: mov %eax,-0x4(%rbp)
则先调用test函数,然后把返回值从eax中取出,并存放到rbp - 4的地址处,也就是赋值给局部变量a。
一般a=fun(),函数执行后,返回值在寄存器,立码是个赋值运算,把值从寄存器或寄存器指向的栈空间复制到变量的内存空间。(返回结构会比较复杂)但都不是啥要注意的。一般说法也不是返回main,是返回调用
有没有回收旧衣服的机构?有没有回收旧衣服的?
鸥燕回收,这是我用过这多平台当中,比较好的一家,不管是售前还是售后,那都是服务很到位的,其提倡低碳生活,从旧衣开始,让回收的旧衣服有了第二次价值,做的很是不错,很受现在家庭认可,因此我每次打扫卫生,整理的衣服,鞋包等,都会找它们进行处理回收的
飞蚂蚁是一个互联网环保回收平台,成立于2014年,采取线上预约的方式,免费上门回收旧衣服,主要以环保和公益的方式处理回收来的旧衣服,用户想要处理自己的旧衣服时,可以在线上平台在线预约,也能通过线下的环保衣栈回收。
鸥燕回收是由广东衣起来环保科技有限公司主办的互联网旧衣服回收平台,倡导着可持续发展的极简主义生活方式,用户可以通过支付宝或是微信搜索鸥燕回收平台小程序即可预约免费上门回收,成功回收后还能获得红包或是家清日用等礼品。
Spring管理单例对象的时候,如何实现不被JVM回收的?
这个问题肯定要分为JVM对象回收和Spring对象管理来说的!如果看完还不会,你尽管来抽我。。
一,JVM对象回收:
就是对没有引用存在的对象进行回收,最原始的做法是加一个对象引用计数器,比如A被B引用了,则A对象的引用计数器为1,只要B没被回收,A的引用计数大于0,A就不会被回收!
但是这样做是有隐患的,如果A引用B,B引用A,然后没有任何其他对象引用A,B的时候,理论上AB都应该被回收了,但是AB引用计数器上面的计数都为1,不能回收,这样两个永远不会使用但也无法回收的对象占据着内存,直到内存溢出!
JVM是怎么解决这一现象的呢?引入一个GCRoots(引用链)的东西,把静态对象引用,常量引用等作为根节点,其余所有的引用都挂在这棵引用树上,上面说到的AB,如果从根节点上遍历的时候没有找到AB的引用(不可达根节点),就说明AB已经脱离了引用链,就算引用计数器还为1,也将被回收!
二,spring管理对象:
首先我们要知道spring通过IOC控制反转帮助开发者管理对象,在spring容器启动的时候加载类(所有实现了BeanFactory的类),然后实例化对象(这儿不讨论是否懒加载等),最后进行使用!
先看SimpleJndiBeanFactory类:
到此,以上就是小编对于c语言回收栈的问题就介绍到这了,希望介绍关于c语言回收栈的3点解答对大家有用。