Dans cet article, nous examinons les raisons pour lesquelles la lecture de lignes à partir d'une entrée standard (stdin) en C fonctionne beaucoup plus lentement que son homologue Python.
En comparant les codes C et Python suivants :
C :
getline(cin, input_line);
Python :
for line in sys.stdin:
Des résultats surprenants ont émergé, Python surpassant C d'un ordre de grandeur. Cet écart peut être attribué à différents paramètres par défaut en C.
Par défaut, le flux cin en C est synchronisé avec le système d'E/S standard (stdio), ce qui lui permet d'éviter la mise en mémoire tampon d'entrée. Cela signifie que cin lira caractère par caractère au lieu d'utiliser des morceaux plus gros, ce qui entraînera de nombreux appels système coûteux.
Pour résoudre cette limitation, vous pouvez désactiver cette synchronisation en ajoutant l'instruction suivante au début de votre fichier principal. function :
std::ios_base::sync_with_stdio(false);
Avec cette modification, cin sera autorisé à mettre son entrée en mémoire tampon de manière indépendante, ce qui entraînera des gains de performances significatifs.
De plus, vous pouvez utiliser le fonction fgets, qui fournit un moyen plus efficace et direct de lire les lignes d'entrée sans encourir la surcharge de synchronisation.
Résumé :
Les paramètres de synchronisation par défaut en C entraînent plus d'appels système pour la gestion du tampon, ce qui le rend plus lent que Python pour la lecture de l'entrée stdin. Pour améliorer les performances, il est recommandé de désactiver cette synchronisation ou d'utiliser la fonction fgets.
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!