Wie lösche ich wirklich einen Slice in Go und gewinne seinen Speicher zurück?

Patricia Arquette
Freigeben: 2024-11-19 14:36:03
Original
607 Leute haben es durchsucht

How do I truly clear a slice in Go and reclaim its memory?

Slices in Go löschen

Das bereitgestellte Code-Snippet zeigt einen Ansatz zum „Löschen“ eines Slice, indem seine Länge auf 0 gesetzt wird:

package main

import "fmt"

func main() {
    letters := []string{"a", "b", "c", "d"}
    fmt.Println(cap(letters))
    fmt.Println(len(letters))
    // clear the slice
    letters = letters[:0]
    fmt.Println(cap(letters))
    fmt.Println(len(letters))
}
Nach dem Login kopieren

Obwohl dieser Ansatz scheinbar den Inhalt des Slice löscht, gibt er den zugrunde liegenden Speicher, der dem Slice zugeordnet ist, nicht an den Garbage Collector frei. Um ein Slice wirklich zu löschen und seinen Speicher zurückzugewinnen, besteht die beste Vorgehensweise darin, es auf Null zu setzen:

package main

import "fmt"

func main() {
    letters := []string{"a", "b", "c", "d"}
    fmt.Println(cap(letters))
    fmt.Println(len(letters))
    // clear the slice
    letters = nil
    fmt.Println(cap(letters))
    fmt.Println(len(letters))
}
Nach dem Login kopieren

Das Setzen eines Slice auf Null hat mehrere Vorteile:

  • Der zugrunde liegende Speicher wird für den Garbage Collector freigegeben.
  • Das Slice verhält sich wie ein leeres Slice mit null Kapazität und null Länge.
  • Alle Aliase auf das ursprüngliche Slice verweisen nicht mehr auf denselben zugrunde liegenden Speicher.

Es ist wichtig zu beachten, dass das Ändern der Kapazität eines Slice auf Null weder das Slice löscht noch den zugrunde liegenden Speicher freigibt. Wenn Sie jedoch ein Slice auf Null setzen, wird effektiv jeglicher zugewiesener Speicher entfernt und das Slice wird auf seinen Anfangszustand zurückgesetzt.

Das obige ist der detaillierte Inhalt vonWie lösche ich wirklich einen Slice in Go und gewinne seinen Speicher zurück?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage