变量的生命周期和垃圾回收机制
可知有种局部变量的生存空间可变长?当局部变量给生命周期的较长的变量赋值时,局部变量的生命周期变长。
var global *int
func f(){
var x int
x = 1
global = &x
}
//此时x从函数f中逃逸,生命周期会变长
可知变量的堆栈分配?
变量使用堆或者栈,不是取决于new或var关键字来声明。
var global *int
func f(){
var x int
x = 1
global = &x
}
//x使用堆空间
func g(){
y:=new(int)
*y = 1
}
//y使用栈空间
可知go如何回收垃圾?
go回收垃圾时,会以该回收对象为路径追溯的源头,通过指针或其他方式的引用来判断是否可以找到该对象,若可以,对象可以被访问,否则不可以被访问;可以访问的对象不被回收,不可以访问的就被回收了。