【发布时间】:2019-10-10 19:42:41
【问题描述】:
有关闭包的一般解释,请参阅How do JavaScript closures work?
Go 闭包在内存中究竟是如何布局的?
以如下函数为例:
type M int
func (m *M) Adder(amount int) func() {
return func() {
*m = *m + amount
}
}
当我们的代码调用a := m.Adder()时,堆上分配了多少内存,它是什么样子的?返回的func() 值占用了多少内存(无论它最终在内存中的哪个位置)?
【问题讨论】:
-
看起来runtime/runtime2.go 中的
funcval结构体很有用。 -
另一个问题是关于 闭包在实践中是如何工作的,但您要问的是来自特定 Go 编译器的未定义版本的实现细节。虽然这可能很有趣,但我不知道 SO 是否适合问。
-
golang 常见问题解答可能会有所帮助:golang.org/doc/faq#stack_or_heap 如果它是函数/闭包等,这对所有人来说都是相似的