Bien qu'il soit généralement admis que std::vector fonctionne de la même manière que les tableaux, des tests récents ont remis en question cette notion. Dans cet article, nous examinerons les différences de performances entre les tableaux std::vector et plain et ferons la lumière sur les raisons sous-jacentes.
Pour effectuer les tests, un benchmark a été implémenté qui impliquait la création et la modification répétées de grands tableaux. d'objets pixels. Les tests ont été effectués à l'aide de deux implémentations : std::vector et des pointeurs bruts simulant des tableaux simples.
Les premiers résultats ont révélé un écart de performances important, std::vector étant environ 3 à 4 fois plus lent que les tableaux simples.
UseArray completed in 2.619 seconds UseVector completed in 9.284 seconds UseVectorPushBack completed in 14.669 seconds
Cette découverte surprenante a incité à un examen plus approfondi du code. Il a été découvert que la différence apparente de performances provenait du fait que la modification d'un élément dans le vecteur nécessitait d'y accéder deux fois : une fois pour redimensionner le vecteur et une autre fois pour initialiser l'élément.
En optimisant l'implémentation du vecteur pour initialiser chacun élément une seule fois, nous avons obtenu des performances considérablement améliorées :
UseVector completed in 2.216 seconds
Cette performance révisée est désormais comparable à celle des tableaux simples. Il est important de noter que la légère différence observée pourrait être attribuée à des facteurs sans rapport avec la structure de données sous-jacente.
En conclusion, bien que std::vector soit une structure de données pratique et polyvalente, ses performances peuvent être influencées par des facteurs. comme la manière dont les éléments sont initialisés et accessibles. Lorsque les performances sont critiques, il est sage d'examiner attentivement les exigences spécifiques et d'explorer des options alternatives telles que des tableaux simples ou d'autres structures de données.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3