Maison > développement back-end > C++ > Pourquoi l'itération std :: vector est-elle plus rapide que l'itération std :: array malgré les tests initiaux suggérant le contraire ?

Pourquoi l'itération std :: vector est-elle plus rapide que l'itération std :: array malgré les tests initiaux suggérant le contraire ?

Susan Sarandon
Libérer: 2024-11-01 15:35:02
original
375 Les gens l'ont consulté

Why is std::vector iteration faster than std::array iteration despite initial benchmarks suggesting otherwise?

Pourquoi l'itération std::vector surpasse l'itération std::array

Idée fausse de la conclusion originale

Initialement, un benchmark défectueux a suggéré que l'itération std :: array était plus rapide que l'itération std :: vector. Cependant, après avoir corrigé le benchmark, il est apparu que std::vector était nettement plus rapide.

Mise en œuvre du benchmark

Pour garantir l'exactitude, le benchmark a utilisé plusieurs améliorations :

  • Utilisation des résultats pour empêcher l'optimisation de la boucle
  • -Drapeau d'optimisation O3 pour une vitesse améliorée
  • std::chrono pour la mesure de boucle isolée sans interférence de variables statiques

Résultats et explications

Les résultats de référence ont révélé que l'itération std::vector s'est terminée en environ 30 millisecondes, tandis que l'itération std::array a pris environ 99 millisecondes.

La disparité vient du comportement de la page mémoire. Dans le benchmark, le std::array se trouvait dans la section .bss de l'exécutable (avec zéro initialisation), donc ses pages mémoire n'étaient pas chargées dans l'espace d'adressage du processus. À l'inverse, le std::vector avait été alloué et rempli de zéros, ce qui entraînait la présence de la page.

Solution

Pré-erreur des pages std::array par zéro -remplir ou utiliser mlock() sous Linux amène ses pages dans l'espace d'adressage, assimilant sa vitesse d'itération à celle de std::vector.

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!

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