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