Werden sich C ++ 0x RValue-Referenzen oder andere Features auf die Stream-Leistung auswirken?

9

Viel Profiling zeigt, dass C ++ - Streams nicht die beste Methode für die Manipulation von Dateien oder Textfolgen sind, wenn Leistung (Geschwindigkeit) benötigt wird. Dennoch sind die Standard-Streams eine gute Möglichkeit, Dinge typsicher zu halten.

Nach dem, was ich gelesen habe, ist das meiste Problem, weil Stream-Implementierungen 1) viele kleine Objekte erstellen / kopieren müssen 2) arnt vollständig generisch (char und wchar nicht auf die gleiche Weise verwalten?) usw.

Wie auch immer, ich dachte, dass C ++ 0x es den Implementierern erlauben könnte, zumindest die Erstellung / Kopie von Objekten zu beschränken und vielleicht andere Leistungsverbesserungen zu ermöglichen, die es vielleicht erlauben, die printf () Leistung zu erreichen? / p>

Gibt es unmittelbare Auswirkungen? Oder müssen wir auf neue Implementierungen warten? Oder brauchen wir noch eine neue (STL-ähnliche) Stream-Bibliothek?

    
Klaim 10.12.2010, 13:52
quelle

1 Antwort

3

Sie könnten an einigen der Leistungsvergleiche in meine Frage hier interessiert sein. Selbst die Funktionen auf der untersten Ebene in der C ++ - Standardbibliotheks-Datenstrom-API sind unter gewöhnlichen Implementierungen unglaublich langsam, und der Quellcode von z.B. Visual C ++ 's stringbuf Klasse, ich sehe keine Kopie von kleinen temporären Objekten. Daher werden rvalue-Referenzen wahrscheinlich nicht viel helfen.

AFAICT, der Hauptgrund für die Langsamkeit von C ++ - Iostreams ist, dass Bibliotheksentwickler mit einer Denkweise beschäftigt sind, dass I / O der Flaschenhals ist, also macht es keinen Sinn, sich über die Leistung der I / O-Bibliothek Sorgen zu machen. Aber I / O ist entschieden nicht der Flaschenhals.

    
Ben Voigt 10.12.2010, 15:00
quelle

Tags und Links