Pourquoi la lecture des entrées standard C est-elle plus lente que celle de Python et comment peut-elle être améliorée ?

DDD
Libérer: 2024-11-23 07:23:18
original
848 Les gens l'ont consulté

Why is C   Standard Input Reading Slower Than Python's, and How Can It Be Improved?

Pourquoi la lecture des lignes depuis stdin en C est plus lente qu'en Python

Malgré les attentes, le code C pour lire les lignes d'entrée à partir de l'entrée standard peut fonctionnent beaucoup plus lentement que leurs homologues Python. Cet écart provient des paramètres par défaut en C.

Configuration du flux d'entrée par défaut

Par défaut, le flux d'entrée C (cin) est synchronisé avec l'entrée/sortie standard (stdio ). Cette synchronisation signifie que cin tente d'éviter toute mise en mémoire tampon d'entrée, ce qui l'amène à lire les caractères un par un.

Pourquoi la mise en mémoire tampon est importante

En général, les flux d'entrée tamponnent l'entrée dans un format plus grand. morceaux, réduisant ainsi le nombre d’appels système requis pour la récupération des données. Cependant, des implémentations et des tampons distincts pour les stdio et iostreams basés sur FILE* peuvent entraîner des problèmes lorsqu'ils sont utilisés ensemble.

Pour éviter des conflits potentiels, les flux sont synchronisés avec stdio par défaut. Cin lit les caractères un par un, ce qui entraîne une surcharge importante, en particulier lors du traitement de millions de lignes.

Solution

Pour améliorer les performances, désactivez la synchronisation du flux à l'aide de sync_with_stdio(false) méthode au début de la fonction principale :

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

Avec ce changement, les flux C peuvent être mis en mémoire tampon indépendamment, ce qui entraîne une entrée plus rapide manipulation.

Approche alternative : fgets

Une autre façon d'améliorer la vitesse de saisie consiste à utiliser la fonction fgets au lieu de getline :

char buffer[1024];
while (fgets(buffer, sizeof(buffer), stdin)) {
    // Process the line
}
Copier après la connexion

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