Heim  >  Artikel  >  Backend-Entwicklung  >  Ist „scanf()“ in C wirklich schneller als „cin“ und wie können wir die Leistung von „cin“ optimieren?

Ist „scanf()“ in C wirklich schneller als „cin“ und wie können wir die Leistung von „cin“ optimieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-18 11:29:02382Durchsuche

Is `scanf()` Really Faster Than `cin` in C  , and How Can We Optimize `cin`'s Performance?

Ist die Verwendung von scanf() in C-Programmen schneller als cin?

Die Behauptung, dass die Verwendung von scanf() beim Lesen von Eingaben schneller als cin ist in C ist etwas Wahres dran. Hier ist eine Erklärung:

Geschwindigkeits-Benchmarking

Um die Behauptung zu überprüfen, wurde ein einfaches Testprogramm erstellt, um eine Liste von Zahlen aus der Standardeingabe zu lesen und deren Exklusiv-ODER zu berechnen ( XOR-Operation. Es wurden zwei Versionen des Programms getestet: eine mit iostream (cin und cout) und die andere mit stdio (scanf und printf).

Beim Testen mit einer großen Eingabemenge (33.280.276 Zufallszahlen) wurde die scanf-Version verwendet übertraf die iostream-Version deutlich und erledigte die Aufgabe in 6,4 Sekunden im Vergleich zu 24,3 Sekunden.

Grund für Geschwindigkeit Unterschied

Der Geschwindigkeitsunterschied entsteht durch die Synchronisation von iostream mit den E/A-Funktionen von C. Eingabe- und Ausgabevorgänge mit iostream werden mit den C-E/A-Funktionen (z. B. getchar(), putchar()) synchronisiert, was zusätzlichen Overhead mit sich bringt.

Optimierung mit ios::sync_with_stdio(false)

Um dieses Synchronisierungsproblem zu beheben, kann std::ios::sync_with_stdio(false) verwendet werden um die Synchronisierung zwischen iostream und stdio zu deaktivieren. Dadurch kann iostream ohne den Mehraufwand der Synchronisierung effizienter arbeiten.

Nach der Deaktivierung der Synchronisierung verbesserte sich die Leistung der iostream-Version erheblich und schloss die Aufgabe in 5,5 Sekunden ab, schneller als die Scanf-Version.

Fazit

Basierend auf den Benchmarking-Ergebnissen ist die Verwendung von scanf() beim Lesen von a tatsächlich schneller als die Verwendung von cin große Menge an Eingaben in C-Programmen. Mit der Optimierung von std::ios::sync_with_stdio(false) kann iostream jedoch möglicherweise scanf() übertreffen und sollte als bevorzugte Wahl für Eingabe- und Ausgabevorgänge angesehen werden.

Das obige ist der detaillierte Inhalt vonIst „scanf()“ in C wirklich schneller als „cin“ und wie können wir die Leistung von „cin“ optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn