golang:变量的生命周期 朱雀 2022-09-07 07:02 151阅读 0赞 变量的生命周期指的是在程序运行期间变量有效存在的时间间隔 变量的生命周期和变量的作用域有着不可分割的关系: * 全局变量:它的生命周期和整个程序的运行周期是一致的; * 局部变量:它的生命周期则是动态的,从创建这个变量的声明语句开始,到这个变量不再被引用为止; * 形式参数和函数返回值:它们都属于局部变量,在函数被调用的时候创建,函数调用结束后被销毁。 另外,我们知道,堆和栈的区别在于: * 堆(heap):堆是用于存放进程执行中被动态分配的内存段。它的大小并不固定,可动态扩张或缩减。当进程调用 malloc 等函数分配内存时,新分配的内存就被动态加入到堆上(堆被扩张)。当利用 free 等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减); * 栈(stack):栈又称堆栈, 用来存放程序暂时创建的局部变量,也就是我们函数的大括号\{ \}中定义的局部变量。 在程序的编译阶段,编译器会根据实际情况自动选择在栈或者堆上分配局部变量的存储空间,不论使用 var 还是 new 关键字声明变量都不会影响编译器的选择。 var global *int func f() { var x int x = 1 global = &x } func g() { y := new(int) *y = 1 } 上述代码中,函数f里的变量x必须在堆上分配,因为它在函数退出后依然可以通过包一级的 global 变量找到,虽然它是在函数内部定义的。用Go语言的术语说,这个局部变量 x 从函数 f 中逃逸了。 相反,当函数 g 返回时,变量 \*y 不再被使用,也就是说可以马上被回收的。因此,\*y 并没有从函数 g 中逃逸,编译器可以选择在栈上分配 \*y 的存储空间,也可以选择在堆上分配,然后由Go语言的 GC(垃圾回收机制)回收这个变量的内存空间。 在实际的开发中,并不需要刻意的实现变量的逃逸行为,因为逃逸的变量需要额外分配内存,同时对性能的优化可能会产生细微的影响。 虽然Go语言能够帮助我们完成对内存的分配和释放,但是为了能够开发出高性能的应用我们任然需要了解变量的声明周期。例如,如果将局部变量赋值给全局变量,将会阻止 GC 对这个局部变量的回收,导致不必要的内存占用,从而影响程序的性能。
相关 新手疑惑:Java中的变量生命周期 在Java中,变量的生命周期主要取决于其存储类型和作用域。 1. 存储类型: - `final`:一旦被初始化,就不能改变其值,生命周期等于程序运行时间。 - ` 叁歲伎倆/ 2024年09月10日 11:27/ 0 赞/ 24 阅读
相关 对Go中变量的生命周期理解 生命周期很好理解,就是正常能使用的变量的有效时间,超过时间限定后,变量就无法再生效,必须重新创建新的变量。变量的生命周期一般指的是在程序运行期间变量有效存在的时间间隔。 对于 落日映苍穹つ/ 2022年12月11日 11:26/ 0 赞/ 141 阅读
相关 Bean的生命周期和BeanDefinition的生命周期 一、Bean的生命周期: ![format_png][] ![format_png 1][] 二、BeanDefinition的生命周期 [format_pn Bertha 。/ 2022年11月25日 04:16/ 0 赞/ 219 阅读
相关 java session 生命周期_Session的生命周期 以前在学习的时候没怎么注意,今天又回过头来仔细研究研究了一下Session的生命周期。 Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Sessi 野性酷女/ 2022年11月06日 09:50/ 0 赞/ 227 阅读
相关 uni-app 应用生命周期、页面生命周期、组件生命周期的区别 页面加载过程: 加载=》显示=》加载完成=》页面隐藏=》页面卸载 触发页面生命周期: onLoad:监听页面加载 =》 onShow:监听页面显示 =》 onReady:监听 亦凉/ 2022年10月18日 11:23/ 0 赞/ 299 阅读
相关 C++中变量的生命周期 今天在论坛上看到有朋友发帖问道:既然静态全局变量与全局变量都存储在全局数据区,为什么作用域却不一样呢?也许答案非常简单:C++就是这么规定的,静态全局变量与全局变量的唯 我不是女神ヾ/ 2022年10月08日 08:49/ 0 赞/ 123 阅读
相关 golang:变量的生命周期 变量的生命周期指的是在程序运行期间变量有效存在的时间间隔 变量的生命周期和变量的作用域有着不可分割的关系: 全局变量:它的生命周期和整个程序的运行周期是一致的; 朱雀/ 2022年09月07日 07:02/ 0 赞/ 152 阅读
相关 React(6)生命周期(组件生命周期、state生命周期) 12、生命周期 参考链接: [React组件生命周期小结][React] 两个生命周期,分别是组件的生命周期,和状态变更的声明周期 组件结构: 父组件套用子组件 桃扇骨/ 2022年05月31日 08:08/ 0 赞/ 416 阅读
相关 组件变量和方法的调用 (生命周期 http://www.devio.org/ 贾鹏辉的博园 装载 更新 卸载发现deBUg无法调试的时候,吧8081前的地址改为localhost即可 react。js 超、凢脫俗/ 2022年05月24日 11:58/ 0 赞/ 20 阅读
还没有评论,来说两句吧...