Maison > développement back-end > C++ > Pourquoi le `cin` de C est-il considérablement plus lent que Python pour lire les lignes à partir de stdin ?

Pourquoi le `cin` de C est-il considérablement plus lent que Python pour lire les lignes à partir de stdin ?

DDD
Libérer: 2024-12-29 11:53:10
original
763 Les gens l'ont consulté

Why is C  's `cin` Significantly Slower Than Python for Reading Lines from stdin?

Pourquoi la lecture des lignes depuis stdin est-elle beaucoup plus lente en C qu'en Python ?

Contexte :

La lecture des lignes de chaîne saisies à partir de stdin en utilisant C peut être considérablement plus lente que son équivalent Python. Cet écart est dû aux paramètres par défaut en C qui nécessitent davantage d'appels système.

Comportement par défaut des flux d'entrée :

Par défaut, le flux d'entrée C cin est synchronisé avec la bibliothèque standard C I/O (stdio). Cette synchronisation garantit que l'entrée n'est pas mise en mémoire tampon et est lue un caractère à la fois. Bien que ce comportement évite les conflits entre les fonctions cin stream et stdio, il entraîne également une pénalité de performances.

Utilisation des appels système :

Lorsque cin est synchronisé avec stdio, chaque caractère lu déclenche un appel système, une opération coûteuse. Cette surcharge ralentit considérablement le processus de saisie, notamment lors de la lecture de grandes quantités de données.

Solution :

Pour améliorer les performances de lecture de ligne en C , on peut désactiver la synchronisation entre cin et stdio. Ceci peut être réalisé en appelant la méthode sync_with_stdio(false).

Alternativement, l'utilisation de la fonction fgets au lieu de getline contourne également la surcharge de synchronisation.

Comparaison des performances :

Voici une comparaison des performances entre l'implémentation C originale (synchronisée) et diverses approches :

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 (not a fair comparison) 54,644,808

Conclusion :

La désactivation de la synchronisation entre cin et stdio ou l'utilisation de fgets peut améliorer considérablement les performances de lecture de ligne en C, la rendant comparable à L'efficacité de Python.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal