In diesem Artikel befassen wir uns mit den Gründen, warum Zeilen aus der Standardeingabe (stdin) in C gelesen werden ist deutlich langsamer als sein Python-Gegenstück.
Beim Vergleich der folgenden C- und Python-Codes:
C :
getline(cin, input_line);
Python:
for line in sys.stdin:
Überraschende Ergebnisse zeigten, dass Python C um eine Größenordnung übertraf. Diese Diskrepanz kann auf unterschiedliche Standardeinstellungen in C zurückgeführt werden.
Standardmäßig ist der Cin-Stream in C mit dem Standard-I/O-System (stdio) synchronisiert, wodurch eine Eingabepufferung vermieden wird. Dies bedeutet, dass cin die Eingabe Zeichen für Zeichen liest, anstatt größere Blöcke zu verwenden, was zu zahlreichen teuren Systemaufrufen führt.
Um diese Einschränkung zu beheben, können Sie diese Synchronisierung deaktivieren, indem Sie die folgende Anweisung am Anfang Ihrer Hauptdatei hinzufügen Funktion:
std::ios_base::sync_with_stdio(false);
Mit dieser Änderung kann cin seine Eingaben unabhängig puffern, was zu erheblichen Leistungssteigerungen führt.
Zusätzlich können Sie die verwenden fgets-Funktion, die eine effizientere und direktere Möglichkeit zum Lesen von Eingabezeilen bietet, ohne den Mehraufwand der Synchronisierung zu verursachen.
Zusammenfassung:
Die Standardsynchronisierungseinstellungen in C führen zu mehr Systemaufrufe für die Pufferverwaltung, wodurch es beim Lesen von Standardeingaben langsamer als Python wird. Um die Leistung zu verbessern, wird empfohlen, diese Synchronisierung zu deaktivieren oder die fgets-Funktion zu verwenden.
Das obige ist der detaillierte Inhalt vonWarum liest C „stdin' so viel langsamer als Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!