Go 闭包的内存布局
与利用不同闭包实现的 JavaScript 相比,Go 闭包存储在堆上,因为
闭包的内存分配
考虑以下生成闭包的函数:
<code class="go">type M int func (m *M) Adder(amount int) func() { return func() { *m = *m + amount } }</code>
当调用 a := m 时.Adder(),发生两次堆分配:
返回的 func() 值的内存占用
返回的 func() 值消耗:
因此,总共本示例中闭包的内存占用量在 32 位平台上为 20 字节,在 64 位平台上为 32 字节。
示例:
<code class="go">func closure() func() *byte { var b [4 * 1024]byte return func() *byte { return &b[0] } }</code>
调用closure()分配:
导致总内存分配4112 字节.
以上是Go 闭包实际消耗了多少内存?的详细内容。更多信息请关注PHP中文网其他相关文章!