首页 > 解决方案 > 堆栈上的变量是否由垃圾收集器收集?

问题描述

我想了解堆栈变量是如何被释放的。它是作为位于堆上的变量进行垃圾收集的,还是像 C 语言一样在离开变量范围后将在内部释放?

标签: variablesgocompiler-constructiongarbage-collection

解决方案


一旦分配该变量的函数返回,分配在堆栈上的变量将被删除,因为堆栈指针将恢复到函数调用之前的状态。那里没有 GC 参与。

在 Go 中,如果栈变量是指向堆上对象的指针,那么一旦函数返回,指针将被移除,然后 GC 可以移除它指向的对象,前提是不存在其他引用。


推荐阅读