Maison > développement back-end > C++ > Pourquoi le « cin » de C est-il considérablement plus lent que l'entrée de Python, et comment peut-il être amélioré ?

Pourquoi le « cin » de C est-il considérablement plus lent que l'entrée de Python, et comment peut-il être amélioré ?

Barbara Streisand
Libérer: 2025-01-04 08:04:34
original
670 Les gens l'ont consulté

Why is C  's `cin` Significantly Slower than Python's Input, and How Can It Be Improved?

Pourquoi la lecture des lignes à partir de stdin est beaucoup plus lente en C qu'en Python

En comparant les vitesses de lecture d'entrée en Python et en C, il a été observé que le code C a fonctionné un ordre de grandeur plus lentement.

Le manque de Buffering

Cet écart résulte d'une différence fondamentale dans le comportement par défaut. cin en C , par défaut, est synchronisé avec l'entrée/sortie standard (stdio), ce qui lui fait renoncer à la mise en mémoire tampon d'entrée, ce qui entraîne la lecture des caractères un par un, un processus coûteux en termes d'appels système.

Solution : Désactiver la synchronisation

Pour améliorer les performances, la synchronisation de cin avec stdio peut être désactivée en ajoutant la ligne suivante au début du programme :

std::ios_base::sync_with_stdio(false);
Copier après la connexion

Cela permet aux flux C de mettre en mémoire tampon les E/S de manière indépendante, améliorant considérablement la vitesse de lecture.

Sondage de paille pour illustrer la différence :

Implementation Lines per second
Python (default) 3,571,428
cin (default/naive) 819,672
cin (no sync) 12,500,000
fgets 14,285,714
wc (unfair comparison) 54,644,808

Ce tableau démontre la grande différence de vitesse de lecture lorsque la synchronisation de cin est désactivée.

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