Heim > Backend-Entwicklung > C++ > Ist „std::vector' wirklich langsamer als native Arrays?

Ist „std::vector' wirklich langsamer als native Arrays?

Susan Sarandon
Freigeben: 2024-12-23 02:17:10
Original
688 Leute haben es durchsucht

Is `std::vector` Really Slower Than Native Arrays?

Ist std::vector deutlich langsamer als native Arrays?

Sie haben vielleicht gehört, dass std::vector im Wesentlichen als implementiert ist ein Array, was bedeutet, dass ihre Leistung vergleichbar sein sollte. Ihre jüngsten Tests deuten jedoch auf etwas anderes hin, da std::vector eine erhebliche Leistungseinbuße aufweist. Dieser Artikel soll klären, ob std::vector tatsächlich viel langsamer ist als native Arrays.

Leistungsanalyse

Der bereitgestellte Testcode misst die Zeit, die zum Initialisieren eines großen Arrays benötigt wird Array von Pixelobjekten mit drei verschiedenen Methoden: std::vector mit resize(), std::vector mit push_back() und ein einfaches Array, das mit malloc() zugewiesen wird. Die Ergebnisse zeigen, dass std::vector mit resize() etwa viermal langsamer ist als ein einfaches Array, während std::vector mit push_back() sogar noch langsamer ist.

Bei näherer Betrachtung wird es jedoch deutlich dass der Leistungsunterschied auf die Tatsache zurückzuführen ist, dass der Testcode den Vektor zweimal durchläuft. Die erste Iteration initialisiert die Objekte und die zweite Iteration liest sie einfach. Dies geschieht, um einen fairen Vergleich mit dem einfachen Array zu ermöglichen, das nur einmal initialisiert werden kann.

Überarbeiteter Test

Zum genauen Vergleich der Leistung von std::vector Für native Arrays wurde der Testcode geändert, um den Vektor nur einmal zu initialisieren:

std::vector<Pixel> pixels(dimensions * dimensions, Pixel(255, 0, 0));
Nach dem Login kopieren

Mit dieser Änderung verringert sich die Leistungslücke zwischen std::vector und ein einfaches Array wurde vernachlässigbar:

g++ -O3 Time.cpp -I <MyBoost>
./a.out
UseVector completed in 2.216 seconds
Nach dem Login kopieren

Fazit

Basierend auf den überarbeiteten Testergebnissen ist die Leistung von std::vector mit der von nativen Arrays vergleichbar . Die in den ersten Tests beobachtete scheinbare Langsamkeit war auf die ineffiziente Initialisierungsmethode zurückzuführen, die für std::vector verwendet wurde. Bei ordnungsgemäßer Initialisierung weist std::vector im Vergleich zu nativen Arrays nur einen minimalen Leistungsaufwand auf.

Es ist zu beachten, dass die dargestellten Testergebnisse spezifisch für die Pixel-Klasse und die jeweiligen verwendeten Initialisierungsmuster sind. Die Leistung kann für andere Klassen und Initialisierungsszenarien variieren.

Das obige ist der detaillierte Inhalt vonIst „std::vector' wirklich langsamer als native Arrays?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage