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 die stdin-Eingabe von C deutlich langsamer als die von Python und wie kann sie verbessert werden?

Susan Sarandon
Susan SarandonOriginal
2024-12-18 11:57:16871Durchsuche

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

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!

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