Ä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!