Heim >Backend-Entwicklung >Golang >Warum werden Go-Verschlüsse auf dem Heap zugewiesen?

Warum werden Go-Verschlüsse auf dem Heap zugewiesen?

Linda Hamilton
Linda HamiltonOriginal
2024-10-28 12:26:31568Durchsuche

 Why are Go Closures Allocated on the Heap?

Wie das Speicherlayout von Go-Verschlüssen ihre Heap-Zuordnung enthüllt

Go-Verschlüsse zeichnen sich durch ihre Fähigkeit aus, auf Variablen zu verweisen, die in ihren umgebenden Funktionen definiert sind . Dies wirft Fragen zu ihrer Speicherzuordnung und ihrem Layout auf.

Speicherlayout von Abschlüssen

Gos Funktionsliterale (im Wesentlichen Abschlüsse) können Variablen zugewiesen oder direkt aufgerufen werden. Ein Abschluss behält Variablen aus seiner umgebenden Funktion bei, die so lange bestehen bleiben, bis sie nicht mehr zugänglich sind.

Gemäß der Go Programming Language Specification werden Variablen, die Funktionsaufrufe überleben, auf dem Heap platziert. Somit werden Go-Abschlüsse auf dem Heap gespeichert.

Beispielanalyse

Betrachten Sie die Funktion „closure()“:

<code class="go">func closure() func() *byte {
    var b [4 * 1024]byte
    return func() *byte {
        return &b[0]
    }
}</code>

Jeder „closure()“ Der Aufruf führt zu zwei Heap-Zuweisungen:

  • 16 Bytes für die Abschlussstruktur
  • 4096 Bytes für das Array b

Also insgesamt 4112 Bytes werden für jeden Abschluss zugewiesen.

Key Takeaway

Go-Abschlüsse sind einfach Variablen, die auf dem Heap leben und die Persistenz gemeinsamer Variablen zwischen dem Abschluss und seiner umgebenden Funktion sicherstellen . Dieses unkomplizierte Speicherlayout ermöglicht eine effiziente Zuweisung und Zugriff auf Abschlussvariablen.

Das obige ist der detaillierte Inhalt vonWarum werden Go-Verschlüsse auf dem Heap zugewiesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn