Dalam Reka Letak Memori Penutupan Go
Berbeza dengan JavaScript, yang memanfaatkan pelaksanaan penutupan yang berbeza, penutupan Go disimpan pada timbunan yang sepatutnya kepada jangka hayat yang berubah-ubah.
Peruntukan Memori untuk Penutupan
Pertimbangkan fungsi berikut yang menghasilkan penutupan:
<code class="go">type M int func (m *M) Adder(amount int) func() { return func() { *m = *m + amount } }</code>
Apabila memanggil := m .Adder(), dua peruntukan timbunan berlaku:
Jejak Memori Nilai func() yang Dipulangkan
Nilai func() yang dikembalikan menggunakan :
Oleh itu, jumlah jejak memori penutupan dalam contoh ini ialah 20 bait pada platform 32-bit, 32 bait pada platform 64-bit.
Contoh:
<code class="go">func closure() func() *byte { var b [4 * 1024]byte return func() *byte { return &b[0] } }</code>
Penutupan panggilan() memperuntukkan:
Menghasilkan jumlah peruntukan memori sebanyak 4112 bait.
Atas ialah kandungan terperinci Berapa Banyak Memori yang Sebenarnya Digunakan oleh Penutupan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!