Go 语言中的 new() 和 make()的区别

xiaorenwuzyh ·
什麼時候會釋放呢? 什麼情況下才會釋放呢? <-- To be continued ...
#1
更多评论
个人推测,释不释放跟golang的GC有关系,记得golang用的是跟OC一样的基于引用计数的GC方案。所以即使是在函数内部alloc的,如果return回去了编译器会将这个对象的引用计数+1导致不会被GC回收。以上都是推测,待验证。
#2
在Go中变量或者对象的保存不一定必须在栈或者堆中的,Go语言会根据变量在函数中的生命周期有关系,如果变量仅在函数中引用,那么就会保存在栈中,函数结束变量从栈中移除。如果函数中的变量不只是在函数中使用,比如列子中的,那么会将变量保存在堆中,所以列子中的变量是可以返回的,这就是Go的变量逃逸
#3