Heim  >  Artikel  >  Backend-Entwicklung  >  Warum ist die std::vector-Iteration schneller als die std::array-Iteration, obwohl erste Benchmarks etwas anderes vermuten lassen?

Warum ist die std::vector-Iteration schneller als die std::array-Iteration, obwohl erste Benchmarks etwas anderes vermuten lassen?

Susan Sarandon
Susan SarandonOriginal
2024-11-01 15:35:02257Durchsuche

Why is std::vector iteration faster than std::array iteration despite initial benchmarks suggesting otherwise?

Warum die std::vector-Iteration die std::array-Iteration übertrifft

Ursprüngliche Schlussfolgerung: Missverständnis

Anfangs ein fehlerhafter Benchmark schlug vor, dass die std::array-Iteration schneller war als die std::vector-Iteration. Bei der Korrektur des Benchmarks stellte sich jedoch heraus, dass std::vector deutlich schneller war.

Benchmark-Implementierung

Um die Genauigkeit sicherzustellen, wurden im Benchmark mehrere Verbesserungen vorgenommen:

  • Ergebnisnutzung zur Verhinderung der Schleifenoptimierung
  • -O3-Optimierungsflag für erhöhte Geschwindigkeit
  • std::chrono für isolierte Schleifenmessung ohne Störung statischer Variablen

Ergebnisse und Erklärung

Die Benchmark-Ergebnisse zeigten, dass die std::vector-Iteration in etwa 30 Millisekunden abgeschlossen war, während die std::array-Iteration etwa 99 Millisekunden dauerte.

Die Ungleichheit ergibt sich aus dem Verhalten der Speicherseite. Im Benchmark befand sich das std::array im .bss-Abschnitt der ausführbaren Datei (ohne Initialisierung), sodass seine Speicherseiten nicht in den Prozessadressraum geladen wurden. Umgekehrt wurde der std::vector zugewiesen und mit Nullen gefüllt, was zur Seitenpräsenz führte.

Lösung

Vorabfehler der Seiten des std::array mit Nullen -Füllen oder Verwenden von mlock() unter Linux bringt seine Seiten in den Adressraum und setzt seine Iterationsgeschwindigkeit mit der von std::vector gleich.

Das obige ist der detaillierte Inhalt vonWarum ist die std::vector-Iteration schneller als die std::array-Iteration, obwohl erste Benchmarks etwas anderes vermuten lassen?. 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