Performances lentes des iostreams de la bibliothèque standard C
Bien que les iostreams de la bibliothèque standard C n'exigent pas explicitement de mauvaises performances, le rapport technique sur les performances C suggère que certains aspects de son traitement peuvent conduire à inefficacités.
Inefficacités obligatoires standard
Selon le rapport, la mise en œuvre d'iostreams implique généralement la répartition du traitement sur plusieurs facettes. Cela peut entraîner des inefficacités inhérentes en raison de la surcharge associée au fonctionnement de chaque facette.
Facets and Write()
Bien que les facettes ne puissent pas être directement utilisées dans l'écriture( ), le profilage de votre code ostringstream révèle qu'un temps important est passé dans std::basic_streambuf::xsputn(). Cette fonction effectue diverses vérifications et mises à jour, entraînant une surcharge de traitement supplémentaire.
Optimisations dans les compilateurs modernes
Le rapport mentionne que certains compilateurs peuvent utiliser des techniques de prétraitement ou de liaison avancées pour atténuer les inefficacités associées aux iostreams. Cependant, on ne sait pas combien de compilateurs actuels ont intégré ces optimisations.
Implémentations alternatives
En pratique, les compilateurs comme Visual C 2010 et gcc 4.3.4 affichent des performances compétitives avec gestion manuelle du tampon lors de l'utilisation de vector
Considérations pratiques
La lenteur observée des performances des iostreams dans vos tests provient du pire des cas d'écriture de petits morceaux de données à plusieurs reprises. Dans les applications du monde réel, le traitement de blocs de données plus volumineux réduit l'impact des frais généraux et permet à iostreams d'utiliser pleinement ses avantages de conception en matière de sécurité de la mémoire et de sécurité du type.
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!