Maison > développement back-end > C++ > `std::vector` est-il vraiment plus lent que les tableaux natifs ?

`std::vector` est-il vraiment plus lent que les tableaux natifs ?

Susan Sarandon
Libérer: 2024-12-23 02:17:10
original
723 Les gens l'ont consulté

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

Std::vector est-il significativement plus lent que les tableaux natifs ?

Vous avez peut-être entendu dire que std::vector est essentiellement implémenté comme un tableau, ce qui implique que leurs performances doivent être comparables. Cependant, vos tests récents suggèrent le contraire, std::vector présentant une pénalité de performances significative. Cet article vise à clarifier si std::vector est effectivement beaucoup plus lent que les tableaux natifs.

Analyse des performances

Le code de test fourni mesure le temps nécessaire pour initialiser un grand tableau d'objets Pixel utilisant trois méthodes différentes : std::vector avec resize(), std::vector avec push_back() et un tableau simple alloué avec malloc(). Les résultats indiquent que std::vector avec resize() est environ 4 fois plus lent qu'un tableau simple, tandis que std::vector avec push_back() est encore plus lent.

Cependant, après un examen plus approfondi, cela devient évident que la différence de performances provient du fait que le code de test parcourt deux fois le vecteur. La première itération initialise les objets et la deuxième itération les lit simplement. Ceci est fait pour faciliter une comparaison équitable avec le tableau simple, qui ne peut être initialisé qu'une seule fois.

Test révisé

Pour comparer avec précision les performances de std :: vector aux tableaux natifs, le code de test a été modifié pour initialiser le vecteur une seule fois :

std::vector<Pixel> pixels(dimensions * dimensions, Pixel(255, 0, 0));
Copier après la connexion

Avec cette modification, l'écart de performances entre std::vector et un Le tableau simple est devenu négligeable :

g++ -O3 Time.cpp -I <MyBoost>
./a.out
UseVector completed in 2.216 seconds
Copier après la connexion

Conclusion

Sur la base des résultats des tests révisés, les performances de std::vector sont comparables à celles des tableaux natifs. La lenteur apparente observée lors des premiers tests était due à la méthode d'initialisation inefficace utilisée pour std::vector. Lorsqu'il est initialisé correctement, std::vector présente une surcharge de performances minimale par rapport aux tableaux natifs.

Il convient de noter que les résultats des tests présentés sont spécifiques à la classe Pixel et aux modèles d'initialisation particuliers utilisés. Les performances peuvent varier pour d'autres classes et scénarios d'initialisation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal