Heim >Backend-Entwicklung >C++ >Ist C „ifstream' immer langsamer als „fscanf'?

Ist C „ifstream' immer langsamer als „fscanf'?

Susan Sarandon
Susan SarandonOriginal
2024-11-12 11:15:02602Durchsuche

Is C   `ifstream` Always Slower Than `fscanf`?

Verbesserung der IOStream-Leistung

Verschiedene C-Benutzer, die C gelernt haben, bevorzugen aufgrund der zugänglichen Schnittstelle und der Verwendung der printf/scanf-Funktionsfamilie auch beim Codieren in C weiterhin Lokalisierungsfunktionen. Beim Vergleich mit dem ifstream von C können jedoch Leistungsbedenken auftreten. Insbesondere wird beobachtet, dass fscanf durchweg ifstream übertrifft.

Optimierungstechniken für IOStreams

Um die Leistung von IOStreams zu verbessern, sollten Sie die folgenden Techniken in Betracht ziehen:

Pufferung mit pubsetbuf()

Durch Erhöhen der Puffergröße werden Festplattentreffer und Systemaufrufe reduziert, wodurch die Leistung verbessert wird. Legen Sie den Puffer fest, indem Sie mit pubsetbuf() auf die Streambuf-Implementierung zugreifen.

char Buffer[N];

std::ifstream file("file.txt");

file.rdbuf()->pubsetbuf(Buffer, N);

Gebietsschemabehandlung

Gebietsschema kann sich aufgrund von Zeichenkonvertierung und komplexen Systemaufrufen auf die Leistung auswirken. Wählen Sie das Standard-C-Gebietsschema, das für minimale Konvertierung und Einheitlichkeit auf allen Maschinen optimiert ist, um diesen Mehraufwand zu vermeiden.

Synchronisierung mit sync_with_stdio()

Dieser Parameter zeigte in unseren Tests keine nennenswerten Leistungsverbesserungen .

Benchmarks und Ergebnisse

Unsere Benchmarks mit einem einfachen Testprogramm zeigen unterschiedliche Ergebnisse auf verschiedenen Plattformen und Compiler. Das Ergebnis legt nahe, dass die Leistung von IOStreams von der Implementierung abhängt.

Hier sind die Ergebnisse verschiedener Benchmarks:

g 4.7.2-2ubuntu1, -O3, Ubuntu 11.10 x86_64

  • C 25 % schneller

g 4.4.5, -O3, Ubuntu Linux 10.10 x86_64

  • C 17 % schneller

g i686-apple-darwin10-g -4.2.1 (GCC) 4.2.1, Mac mini, 4 GB RAM

  • C 111 % langsamer

clang 3.8.0-2ubuntu4, Kubuntu 16.04 Linux 4.8-rc3

  • C 66 % schneller

Diese Ergebnisse unterstreichen die Bedeutung der Implementierungsqualität bei der Leistungsoptimierung von IOStreams.

Das obige ist der detaillierte Inhalt vonIst C „ifstream' immer langsamer als „fscanf'?. 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