Wie viel Speicher verbrauchen Go-Abschlüsse tatsächlich?

DDD
Freigeben: 2024-10-31 21:25:29
Original
385 Leute haben es durchsucht

How Much Memory Do Go Closures Actually Consume?

In-Memory-Layout von Go-Abschlüssen

Im Gegensatz zu JavaScript, das eine andere Abschlussimplementierung nutzt, werden Go-Abschlüsse fällig auf dem Heap gespeichert zu variabler Langlebigkeit.

Speicherzuweisung für Abschlüsse

Betrachten Sie die folgende Funktion, die einen Abschluss generiert:

<code class="go">type M int

func (m *M) Adder(amount int) func() {
    return func() {
        *m = *m + amount
    }
}</code>
Nach dem Login kopieren

Beim Aufruf von a := m .Adder(), zwei Heap-Zuweisungen erfolgen:

  • 16 Bytes: Speichert den Funktionszeiger und den Zeiger auf die erfasste Variable (m).
  • Variablengröße: Abhängig vom Typ und der Größe der erfassten Variablen. In diesem Fall ist es ein int, es werden also 4 Bytes benötigt.

Speicherbedarf des zurückgegebenen func()-Werts

Der zurückgegebene func()-Wert verbraucht :

  • 8 Bytes auf 32-Bit-Plattformen, 16 Bytes auf 64-Bit-Plattformen:Speichert den Funktionszeiger.

Daher die Summe Der Speicherbedarf des Abschlusses beträgt in diesem Beispiel 20 Bytes auf 32-Bit-Plattformen, 32 Bytes auf 64-Bit-Plattformen.

Beispiel:

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

Der Aufruf von close() reserviert:

  • 16 Bytes: Abschlussmetadaten (Funktionszeiger, erfasster Variablenzeiger)
  • 4096 Bytes: Das vom Abschluss erfasste Byte-Array

Ergibt eine Gesamtspeicherzuordnung von 4112 Bytes.

Das obige ist der detaillierte Inhalt vonWie viel Speicher verbrauchen Go-Abschlüsse tatsächlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!