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>
Beim Aufruf von a := m .Adder(), zwei Heap-Zuweisungen erfolgen:
Speicherbedarf des zurückgegebenen func()-Werts
Der zurückgegebene func()-Wert verbraucht :
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 &b[0] } }</code>
Der Aufruf von close() reserviert:
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!