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