Während allgemein angenommen wird, dass std::vector ähnlich wie Arrays funktioniert, haben neuere Tests diese Vorstellung in Frage gestellt. In diesem Artikel untersuchen wir die Leistungsunterschiede zwischen std::vector und einfachen Arrays und beleuchten die zugrunde liegenden Gründe.
Zur Durchführung der Tests wurde ein Benchmark implementiert, bei dem große Arrays wiederholt erstellt und geändert wurden von Pixelobjekten. Die Tests wurden mit zwei Implementierungen durchgeführt: std::vector und Rohzeigern, die einfache Arrays simulieren.
Die ersten Ergebnisse zeigten eine erhebliche Leistungslücke, wobei std::vector etwa drei- bis viermal langsamer war als einfache Arrays.
UseArray completed in 2.619 seconds UseVector completed in 9.284 seconds UseVectorPushBack completed in 14.669 seconds
Dieser überraschende Befund führte zu einer genaueren Untersuchung des Codes. Es wurde festgestellt, dass der offensichtliche Leistungsunterschied auf die Tatsache zurückzuführen ist, dass zum Ändern eines Elements im Vektor zweimal darauf zugegriffen werden musste: einmal, um die Größe des Vektors zu ändern, und noch einmal, um das Element zu initialisieren.
Durch Optimierung der Vektorimplementierung, um jedes Element zu initialisieren Element nur einmal ausgeführt haben, haben wir eine deutlich verbesserte Leistung erzielt:
UseVector completed in 2.216 seconds
Diese überarbeitete Leistung ist jetzt mit der von Plain vergleichbar Arrays. Es ist wichtig zu beachten, dass der beobachtete geringfügige Unterschied auf Faktoren zurückzuführen sein könnte, die nichts mit der zugrunde liegenden Datenstruktur zu tun haben.
Zusammenfassend lässt sich sagen, dass std::vector zwar eine praktische und vielseitige Datenstruktur ist, ihre Leistung jedoch durch Faktoren beeinflusst werden kann beispielsweise die Art und Weise, wie Elemente initialisiert und auf sie zugegriffen wird. Wenn die Leistung von entscheidender Bedeutung ist, ist es ratsam, die spezifischen Anforderungen sorgfältig zu prüfen und alternative Optionen wie einfache Arrays oder andere Datenstrukturen zu erkunden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3