Maison > développement back-end > C++ > Pourquoi C `stdin` lit-il tellement plus lentement que celui de Python ?

Pourquoi C `stdin` lit-il tellement plus lentement que celui de Python ?

Linda Hamilton
Libérer: 2025-01-04 17:11:41
original
254 Les gens l'ont consulté

Why is C   `stdin` Reading So Much Slower Than Python's?

Comprendre les performances lentes de la lecture Stdin en C par rapport à Python

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);
Copier après la connexion

Python :

for line in sys.stdin:
Copier après la connexion

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);
Copier après la connexion

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!

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