Go クロージャのメモリ レイアウト
別のクロージャ実装を利用する JavaScript とは対照的に、Go クロージャはヒープに保存されます。
クロージャのメモリ割り当て
クロージャを生成する次の関数を考えてみましょう:
<code class="go">type M int func (m *M) Adder(amount int) func() { return func() { *m = *m + amount } }</code>
:= m を呼び出すとき.Adder()、2 つのヒープ割り当てが発生します:
返された 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 中国語 Web サイトの他の関連記事を参照してください。