


Array vs. Slice in Go: Warum ist der Zugriff auf lokale Slice-Elemente schneller?
Dec 05, 2024 am 07:32 AMArray vs. Slice: Geschwindigkeitsvergleich des Elementzugriffs
In Go sind Arrays und Slices häufig verwendete Datenstrukturen zum Speichern einer geordneten Sammlung von Elemente. Ein bemerkenswerter Unterschied zwischen den beiden sind ihre Leistungsmerkmale.
Wenn es um den Zugriff auf Elemente geht, wird erwartet, dass der Zugriff auf Elemente in einem Array schneller ist als der Zugriff auf Elemente in einem Slice. Dies liegt daran, dass ein Slice eine Ansicht eines zugrunde liegenden Arrays darstellt und der Zugriff auf seine Elemente möglicherweise eine zusätzliche Indirektionsebene erfordert.
Jüngste Benchmarks haben jedoch überraschende Ergebnisse gezeigt. Beim Vergleich lokaler Arrays und Slices deuten die Ergebnisse darauf hin, dass lokale Slices deutlich schneller auf Elemente zugreifen als lokale Arrays.
Analyse der Ergebnisse
Nach Prüfung des Assemblercodes Sowohl für lokale Arrays als auch für lokale Slices wird ein wesentlicher Unterschied deutlich. Die Array-Version lädt bei jedem Array-Zugriff wiederholt die Adresse des Arrays (a) aus dem Speicher.
LEAQ "".a+1000(SP),BX
Im Gegensatz dazu rechnet die Slice-Version ausschließlich auf Registern, nachdem die Slice-Daten zunächst aus dem Speicher geladen wurden.
LEAQ (DX)(SI*1),BX
Dieser Unterschied in den Speicherzugriffsmustern ist wahrscheinlich für den Leistungsvorteil lokaler Slices verantwortlich. Durch die Vermeidung wiederholter Speicherlasten für den Zugriff auf die Basisadresse des Arrays profitieren Slices von einem schnelleren Elementzugriff.
Außerdem ruft die Array-Version die Routine runtime.duffcopy auf, während dies bei der Slice-Version nicht der Fall ist. Duffcopy ist eine Assemblerroutine, die für das Massenspeicherkopieren optimiert ist, und ihre Verwendung in der Array-Version kann zusätzlich zu ihrer langsameren Leistung beitragen.
Das obige ist der detaillierte Inhalt vonArray vs. Slice in Go: Warum ist der Zugriff auf lokale Slice-Elemente schneller?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie schreibe ich Dateien in Go Language bequem?

Wie kann ich Linter und statische Analyse -Tools verwenden, um die Qualität und Wartbarkeit meines GO -Codes zu verbessern?
