Maison > développement back-end > Golang > Existe-t-il un Go rapide et efficace équivalent au memset de C ?

Existe-t-il un Go rapide et efficace équivalent au memset de C ?

DDD
Libérer: 2024-12-22 04:22:10
original
122 Les gens l'ont consulté

Is there a fast and efficient Go equivalent to C  's memset?

Existe-t-il un équivalent Go pour la fonction C memset ?

En C , memset permet l'initialisation d'un tableau avec une valeur spécifique . Cette fonction est particulièrement efficace. Dans Go, initialiser un tableau ou une tranche avec tous des zéros est simple en utilisant make([]int, 1000000); cependant, cela n'offre pas la possibilité d'initialiser avec des valeurs non nulles.

Bien qu'une boucle puisse être utilisée pour une initialisation manuelle, elle n'a pas l'efficacité de memset.

Analogues de memset en Go :

1. Approche basée sur la boucle :

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

2. Approche basée sur copy() (recommandée) :

La fonction copy() est hautement optimisée et peut être utilisée pour des opérations de type memset.

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

Cette solution définit le premier élément manuellement et copie les parties déjà définies dans les parties non définies à l'aide de copy(). L'algorithme utilise une approche de doublement pour réduire le nombre d'itérations à log(n).

Benchmarking :

Benchmarking memsetRepeat() par rapport à memsetLoop() montre une performance notable avantage pour memsetRepeat() à mesure que le nombre d'éléments augmente, notamment autour de 3800-4000 éléments.

Remarque supplémentaire :

Pour les petites tranches, memsetLoop() peut fonctionner légèrement mieux. Cependant, memsetRepeat() offre des performances nettement meilleures pour les tranches plus grandes.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal