Maison > développement back-end > Golang > le corps du texte

Comment puis-je réellement effacer une tranche dans Go et récupérer sa mémoire ?

Patricia Arquette
Libérer: 2024-11-19 14:36:03
original
588 Les gens l'ont consulté

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

Effacer des tranches dans Go

L'extrait de code fourni illustre une approche pour « effacer » une tranche en définissant sa longueur sur 0 :

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))
}
Copier après la connexion

Bien que cette approche puisse sembler effacer le contenu de la tranche, elle ne libère pas la mémoire sous-jacente associée à la tranche au garbage collector. Pour vraiment effacer une tranche et récupérer sa mémoire, la meilleure pratique consiste à la définir sur nil :

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))
}
Copier après la connexion

Définir une tranche sur zéro présente plusieurs avantages :

  • La mémoire sous-jacente est libérée vers le ramasse-miettes.
  • La tranche se comportera comme une tranche vide avec une capacité et une longueur nulles.
  • Tout alias vers la tranche d'origine ne pointera plus à la même mémoire sous-jacente.

Il est important de noter que changer la capacité d'une tranche à zéro n'efface pas la tranche ni ne libère la mémoire sous-jacente. Cependant, définir une tranche sur zéro supprime efficacement toute mémoire allouée et réinitialise la tranche à son état initial.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal