Maison > Article > développement back-end > Scanf() surpasse-t-il toujours iostream en termes de vitesse d'entrée C ?
Scanf() peut-il surpasser iostream dans les performances C ?
L'idée selon laquelle scanf() fournit une gestion des entrées plus rapide que cin en C a suscité un débat entre programmeurs. Cet article approfondit la comparaison des performances entre ces méthodes, examine les preuves et fournit une explication détaillée.
Tests de performances
Pour évaluer la différence de performances, un programme simple a été créé qui lit une liste de nombres à partir de l'entrée standard et effectue une opération XOR sur eux. cin et scanf() ont été utilisés dans des implémentations distinctes :
#include <iostream> int main() { int parity = 0; int x; while (std::cin >> x) parity ^= x; std::cout << parity << std::endl; return 0; }
#include <stdio.h> int main() { int parity = 0; int x; while (1 == scanf("%d", &x)) parity ^= x; printf("%d\n", parity); return 0; }
Résultats
À l'aide d'un fichier contenant plus de 33 millions de nombres aléatoires, les temps d'exécution ont été mesurés :
Considérations d'optimisation
La modification des paramètres d'optimisation du compilateur a eu un impact minimal sur les résultats.
Performances iostream améliorées
Il a été découvert que l'écart de performances est en partie dû au fait que iostream maintient la synchronisation avec le C I/O. fonctions. En désactivant cette synchronisation avec la commande std::ios::sync_with_stdio(false), les performances d'iostream se sont considérablement améliorées :
#include <iostream> int main() { int parity = 0; int x; std::ios::sync_with_stdio(false); while (std::cin >> x) parity ^= x; std::cout << parity << std::endl; return 0; }
Nouveaux résultats
Après la désactivation de la synchronisation iostream :
Conclusion
Les preuves suggèrent que scanf() est en effet plus rapide que cin pour la gestion des entrées brutes en C . Cependant, si la synchronisation d'iostream est désactivée, iostream devient le meilleur choix, surpassant à la fois scanf() et la version optimisée cin.
Par conséquent, même si scanf() peut être plus rapide pour des scénarios spécifiques, iostream offre un meilleur contrôle sur la synchronisation. et une gamme plus large de fonctionnalités. Lorsque la vitesse est cruciale, il est recommandé de désactiver la synchronisation iostream.
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!