Maison > développement back-end > Golang > Comment effacer efficacement une tranche dans Go et libérer sa mémoire sous-jacente ?

Comment effacer efficacement une tranche dans Go et libérer sa mémoire sous-jacente ?

Barbara Streisand
Libérer: 2024-11-21 05:36:11
original
601 Les gens l'ont consulté

How do you effectively clear a slice in Go and release its underlying memory?

Effacer une tranche dans Go

L'article traite de l'approche optimale pour effacer une tranche dans Go. La solution initialement proposée cherchait à effacer une tranche en la définissant sur une plage vide de son propre tampon. Bien que cette approche semble logique, elle ne libère pas la mémoire sous-jacente associée à la tranche.

La solution recommandée consiste simplement à définir la tranche sur zéro. Les tranches nulles dans Go présentent des caractéristiques de bon comportement, et l'attribution de la tranche à zéro libère la mémoire sous-jacente au garbage collector. Cette approche efface efficacement la tranche sans encourir les limitations de la proposition initiale.

Pour illustrer l'efficacité de cette méthode, considérons l'exemple de code suivant :

package main

import (
    "fmt"
)

func dump(letters []string) {
    fmt.Println("letters = ", letters)
    fmt.Println(cap(letters))
    fmt.Println(len(letters))
    for i := range letters {
        fmt.Println(i, letters[i])
    }
}

func main() {
    letters := []string{"a", "b", "c", "d"}
    dump(letters)
    // clear the slice
    letters = nil
    dump(letters)
    // add stuff back to it
    letters = append(letters, "e")
    dump(letters)
}
Copier après la connexion

Sortie :

letters =  [a b c d]
4
4
0 a
1 b
2 c
3 d
letters =  []
0
0
letters =  [e]
1
1
0 e
Copier après la connexion

Comme démontré, définir la tranche sur zéro efface son contenu, y compris sa capacité. Cela permet une réutilisation efficace de la tranche sans aucune donnée persistante des opérations précédentes.

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