Bagaimanakah Penutupan Go Diwakili dalam Ingatan?

Susan Sarandon
Lepaskan: 2024-10-28 13:52:31
asal
414 orang telah melayarinya

How are Go Closures Represented in Memory?

Reka Letak Memori Penutupan dalam Go

Fungsi Go, termasuk penutupan, melaksanakan skop leksikal, membenarkannya merujuk pembolehubah yang diisytiharkan dalam skop lampirannya . Tingkah laku ini menimbulkan persoalan tentang bagaimana penutupan ini diwakili dalam ingatan.

Dalam Go, penutupan pada asasnya ialah pembolehubah yang merujuk kepada persekitaran di mana ia dicipta. Memori yang diperuntukkan untuk penutupan terdiri daripada:

  • Penunjuk kepada kod fungsi
  • Satu set rujukan kepada pembolehubah yang ditangkap oleh penutupan daripada skop yang disertakan

Saiz memori yang diperuntukkan untuk penutupan bergantung pada platform dan seni bina, tetapi ia biasanya melibatkan:

  • 8 bait untuk penuding kod (pada sistem 64-bit)
  • 8 bait setiap pembolehubah yang ditangkap

Sebagai contoh, pertimbangkan penutupan berikut:

type M int

func (m *M) Adder(amount int) func() {
    return func() {
        *m = *m + amount
    }
}
Salin selepas log masuk

Apabila kod memanggil := m.Adder(), dua penutupan dibuat :

  1. Penutupan pertama menangkap jumlah daripada skop yang disertakan.
  2. Penutupan kedua menangkap a, yang merujuk m, menangkap m secara tidak langsung.

The susun atur memori penutupan pertama akan terdiri daripada:

  • 8 bait untuk penunjuk kod fungsi
  • 4 bait untuk jumlah (dengan andaian int ialah 32 bit)

Jumlah memori yang diperuntukkan ialah 16 bait.

Susun atur memori penutupan kedua akan terdiri daripada:

  • 8 bait untuk penuding kod fungsi
  • 8 bait untuk a, yang menunjukkan kepada penutupan pertama
  • 8 bait untuk (*m).Penambah(jumlah)

Jumlah memori yang diperuntukkan ialah 24 bait.

Ringkasnya, penutupan Go dilaksanakan pada timbunan dan menyimpan penuding kepada kod fungsi serta rujukan kepada pembolehubah yang ditangkap. Saiz memori yang diperuntukkan bergantung pada bilangan pembolehubah yang ditangkap dan seni bina platform.

Atas ialah kandungan terperinci Bagaimanakah Penutupan Go Diwakili dalam Ingatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!