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);
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!