Heim >Backend-Entwicklung >C++ >Warum ist die stdin-Eingabe von C deutlich langsamer als die von Python und wie kann sie verbessert werden?
Warum ist das Lesen von Zeilen aus stdin in C viel langsamer als in Python?
Das Lesen von Zeilen aus der Standardeingabe (stdin) kann in deutlich langsamer sein C im Vergleich zu Python aufgrund unterschiedlicher Standardeinstellungen im C-Eingabestream.
Standard Pufferung
Standardmäßig wird der C-Eingabestream (cin) mit den Standard-Eingabe-/Ausgabestreams (stdio) synchronisiert. Diese Synchronisierung zwingt cin dazu, jegliche Eingabepufferung zu vermeiden, was dazu führt, dass jeweils nur ein Zeichen gelesen wird.
Python-Pufferung
Im Gegensatz dazu der stdin-Stream in Python ist standardmäßig gepuffert, wodurch größere Eingabemengen auf einmal gelesen werden können. Dadurch wird die Anzahl der zum Lesen der Daten erforderlichen Systemaufrufe reduziert, was zu einer verbesserten Leistung führt.
Korrektur des C-Codes
Um eine ähnliche Leistung in C zu erzielen, können Sie deaktivieren B. die Synchronisierung mit stdio, indem Sie am Anfang Ihrer Hauptfunktion die folgende Zeile hinzufügen:
std::ios_base::sync_with_stdio(false);
Dadurch kann cin seine Eingaben puffern und das Lesen erheblich verbessern Geschwindigkeit.
fgets vs. getline
Darüber hinaus könnten Sie erwägen, fgets anstelle von getline() zu verwenden, einer C-Funktion, die eine Textzeile aus a liest Datei oder Standardeingabe. fgets hat den Vorteil, dass keine dynamische Speicherzuweisung erforderlich ist, was die Leistung weiter verbessert.
Leistungsvergleich
Unten finden Sie eine Tabelle, in der die Zeilen pro Sekunde (LPS) für verschiedene Ansätze verglichen werden Verwenden einer 100-M-Zeilendatei:
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 fair comparison) | 54,644,808 |
Wie Sie sehen können, verbessert das Deaktivieren der Synchronisierung oder die Verwendung von fgets die Leistung von C erheblich .
Das obige ist der detaillierte Inhalt vonWarum ist die stdin-Eingabe von C deutlich langsamer als die von Python und wie kann sie verbessert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!