Heim  >  Artikel  >  Backend-Entwicklung  >  Ist die Leistung von C IOStream tatsächlich langsamer als printf/scanf?

Ist die Leistung von C IOStream tatsächlich langsamer als printf/scanf?

Barbara Streisand
Barbara StreisandOriginal
2024-11-07 00:57:02837Durchsuche

Is C   IOStream Performance Actually Slower Than printf/scanf?

So optimieren Sie die IOStream-Leistung in C

C-Benutzer bevorzugen oft die printf/scanf-Funktionsfamilie gegenüber C IOStreams, trotz der Schnittstelle der letzteren Vorteile. Als Hauptgrund für diese Präferenz werden häufig Leistungsbedenken genannt.

Pufferung

Eine Vergrößerung der Puffergröße des zugrunde liegenden Streambuf kann die Leistung erheblich verbessern, indem Festplattenzugriffe und Systemzugriffe reduziert werden Anrufe. Dies geschieht mit:

char Buffer[N];
std::ifstream file("file.txt");
file.rdbuf()->pubsetbuf(Buffer, N);

Gebietsschema-Handhabung

Gebietsschemata können aufgrund von Zeichenkonvertierung, Filterung und dynamischem Versand zu Leistungseinbußen führen. Das Festlegen des Gebietsschemas auf das Standard-C-Gebietsschema, das diese Vorgänge deaktiviert, kann die Leistung verbessern:

std::locale::global(std::locale("C"));

Synchronisierung

Synchronisierung mit C stdio (std::ios_base: :sync_with_stdio(false)) bietet keine erkennbaren Leistungsvorteile.

Messungen

Benchmarking mit verschiedenen Compilern und Plattformen zeigt unterschiedliche Ergebnisse:

  • g 3.4.2 auf SUSE 10p3: ~20 % Verlangsamung für C
  • g 4.7.2 auf Ubuntu 11.10: C 25 % schneller
  • g 4.4.5 auf Ubuntu Linux 10.10: C 17 % schneller
  • g auf macOS variieren je nach spezifischen Implementierungsimplementierungen. Daher gibt es keine universelle Lösung zur plattformübergreifenden Optimierung von IOStreams.

Das obige ist der detaillierte Inhalt vonIst die Leistung von C IOStream tatsächlich langsamer als printf/scanf?. 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