Maison >développement back-end >Golang >Comment puis-je réellement effacer une tranche dans Go et récupérer sa mémoire ?

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

Patricia Arquette
Patricia Arquetteoriginal
2024-11-19 14:36:03655parcourir

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))
}

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))
}

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!

Déclaration:
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