Heim >Backend-Entwicklung >C++ >Warum ist „cin' von C deutlich langsamer als die Eingabe von Python und wie kann es verbessert werden?

Warum ist „cin' von C deutlich langsamer als die Eingabe von Python und wie kann es verbessert werden?

Barbara Streisand
Barbara StreisandOriginal
2025-01-04 08:04:34642Durchsuche

Why is C  's `cin` Significantly Slower than Python's Input, and How Can It Be Improved?

Warum das Lesen von Zeilen aus stdin in C viel langsamer ist als in Python

Beim Vergleich der Eingabelesegeschwindigkeiten in Python und C wurde festgestellt, dass Der C-Code war um eine Größenordnung langsamer.

cins Mangel an Pufferung

Diese Diskrepanz ergibt sich aus einem grundlegenden Unterschied im Standardverhalten. cin in C ist standardmäßig mit der Standard-Eingabe/Ausgabe (stdio) synchronisiert, wodurch auf die Eingabepufferung verzichtet wird, was dazu führt, dass Zeichen einzeln gelesen werden, ein teurer Prozess in Bezug auf Systemaufrufe.

Lösung: Synchronisierung deaktivieren

Um die Leistung zu verbessern, kann die Synchronisierung von cin mit stdio deaktiviert werden, indem die folgende Zeile am Anfang hinzugefügt wird Programm:

std::ios_base::sync_with_stdio(false);

Dadurch können C-Streams I/O unabhängig puffern, was die Lesegeschwindigkeit deutlich erhöht.

Strohumfrage zur Veranschaulichung des Unterschieds:

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 (unfair comparison) 54,644,808

Diese Tabelle zeigt den großen Unterschied in der Lesegeschwindigkeit, wenn die Synchronisierung von cin deaktiviert ist.

Das obige ist der detaillierte Inhalt vonWarum ist „cin' von C deutlich langsamer als die Eingabe von Python und wie kann es 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