Heim >Backend-Entwicklung >Golang >Go's Äquivalent zum Memset von C: Wie initialisiert man Arrays mit Werten ungleich Null effizient?

Go's Äquivalent zum Memset von C: Wie initialisiert man Arrays mit Werten ungleich Null effizient?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-20 00:38:13646Durchsuche

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

Äquivalent zum Memset von C

Ursprüngliche Frage:

Gibt es eine Methode? In Go ist das analog zur Memset-Funktion von C, die eine effiziente Initialisierung von Arrays mit einem Wert ungleich Null ermöglicht Werte?

Antwort:

Go bietet in seiner Standardbibliothek kein direktes Äquivalent zu Memset. Es gibt jedoch mehrere Ansätze, die eine ähnliche Funktionalität erreichen können:

Schleifenbasierte Lösung:

func memsetLoop(a []int, v int) {
    for i := range a {
        a[i] = v
    }
}

Diese einfache Schleife iteriert über ein Array und weist den Wert v zu zu jedem Element.

Optimierte Lösung mit copy():

Go's Die Funktion copy() ist stark optimiert und kann für diesen Zweck verwendet werden:

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

Diese Lösung legt das erste Element manuell fest und kopiert dann wiederholt den initialisierten Teil des Arrays auf die verbleibenden Elemente.

Leistungsvergleich:

Benchmarks zeigen, dass die memsetRepeat-Lösung aufgrund der Optimierung den schleifenbasierten Ansatz für größere Arrays übertrifft copy()-Funktion.

Zusammenfassend lässt sich sagen, dass Go-Programmierer der Einfachheit halber entweder die schleifenbasierte Lösung oder die optimierte memsetRepeat-Lösung für eine verbesserte Leistung beim Initialisieren von Arrays mit Werten ungleich Null verwenden können.

Das obige ist der detaillierte Inhalt vonGo's Äquivalent zum Memset von C: Wie initialisiert man Arrays mit Werten ungleich Null effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn