Maison > développement back-end > Golang > Équivalent Memset de Go : comment initialiser efficacement des tableaux avec des valeurs non nulles ?

Équivalent Memset de Go : comment initialiser efficacement des tableaux avec des valeurs non nulles ?

Barbara Streisand
Libérer: 2025-01-04 02:29:40
original
791 Les gens l'ont consulté

Go's Memset Equivalent: How to Efficiently Initialize Arrays with Non-Zero Values?

Go Analog pour Memset

Question :

Les programmeurs Go recherchent une méthode efficace analogue à Le memset de C pour initialiser des tableaux avec des valeurs non nulles, comme les boucles de base peuvent l'être lent.

Réponse :

Bien que Go ne dispose pas d'une fonction memset explicite, il existe des approches optimisées qui émulent sa fonctionnalité.

Boucle- Solution basée :

L'alternative la plus simple est une boucle qui parcourt le tableau, attribuant le valeur souhaitée pour chaque élément :

func memsetLoop(a []int, v int) {
    for i := range a {
        a[i] = v
    }
}
Copier après la connexion

Solution basée sur la copie :

La fonction copy() optimisée de Go peut être exploitée pour initialiser rapidement les tableaux. En définissant manuellement le premier élément et en copiant à plusieurs reprises la partie remplie, le nombre d'itérations est réduit à log(n):

func memsetRepeat(a []int, v int) {
    if len(a) == 0 {
        return
    }
    a[0] = v
    for bp := 1; bp < len(a); bp *= 2 {
        copy(a[bp:], a[:bp])
    }
}
Copier après la connexion

Comparaison des performances :

Pour petits tableaux, la solution basée sur la boucle est légèrement plus rapide. Cependant, à mesure que la taille du tableau augmente, la solution basée sur la copie devient nettement plus rapide en raison de son nombre réduit d'itérations.

Résultats de référence :

Array Size Loop-Based Copy-Based
100 elements 1.15x slower
1,000 elements 2.5x slower
10,000 elements 2x slower
100,000 elements 1.5x slower

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