golang中变量回收销毁的一个问题

ddxx11223 · · 3851 次点击
lzh2nix
a man, a coder, a runner
建议看下 the Go programming language 2.3.4 这里举得例子都和你这个差不多。 “A compiler may choose to allocate local variables on the heap or on the stack but, perhaps surprisingly, this choice is not deter mined by whether var or new was used to declare the variable” 这里的f肯定是分配在heap上的,goroutine运行完之后发现还有global的变量引用,就不会销毁的。
#1
更多评论
楼上说得对. C++中分配在栈上的内存当然不能这样写, 但是 go compiler 会分析你分配在栈上的方式是不是合适的, 如果不合适它会帮你分配到堆上.
#2
所以是go compiler在编译期间就分析了把变量放在了堆上,还是GC后期运行时介入将其放在堆上?
#3