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中文網其他相關文章!