Am Donnerstag 06 Dezember 2001 15:45 schrieben Sie:
Am Donnerstag, dem 06. Dezember 2001 um 15:05:34, schrieb Stephan Goetter:
Was passiert eigentlich mit lokalen Variablen am Kontruktorende?
Na wenigstens einer guckt scharf hin.
Am Donnerstag, dem 06. Dezember 2001 um 15:32:17, schrieb Stephan Goetter:
Nun, zumindest den Namensraum Qt gibt es ja schon ;)
Wo? In neueren Versionen als 2.3?
http://doc.trolltech.com/2.3/qnamespace-h.html
Nun stell dir vor, die hätten in Qt noch Ausnahmen verwendet (allgemein bekannt für ihre Performance) und was C++ nicht alles noch bietet.
Ich war immer der Meinung, dass Ausnahmen im Normalfall (kein Fehler aufgetreten) keinen Performancenachteil darstellen. Und im Fehlerfall braucht man sowieso irgendeine Art von Fehlerbehandlung. Hast du da andere Informationen, Zahlen etc.?
Zahlen gibts bestimmt im Netz. Im Bjarne Stroustrup gibts ein extra Kapitel "14.8 Ausnahmen und Effizienz":
"Prinzipiell kann Ausnahmebehandlung so implementiert werden, daß kein Mehraufwand zu Laufzeit auftritt, wenn keine Ausnahme geworfen wird. Zusätzlich kann das Werfen so realisiert werden, daß es nicht viel aufwendiger als ein normaler Funktionsaufruf ist. Dies zu tun, ohne erheblichen Mehraufwand an Speicher zuzufügen und gleichzeitig die Kompatibilät mit der C-Aufrufschnittstelle, mit Debugger-Konventionen, usw. zu wahren ist möglich, aber schwer. Allerdings muss man in Errinnerung behalten, daß die Alternativen zur Ausnahmebehandlung auch nicht umsonst sind. Es ist nicht unüblich, daß sich in traditionellen Systemen die Hälfte des Codes mit Fehlerbehandlung beschäftigt."
Hier klingt er wie ein Politiker der sich für seine Amtszeit rechtfertigt ;) und beantwortet die Frage ob ein "return -1;" schneller ist als ein "throw Exception();" eigentlich von selbst.
Das die Implementation des g++ unter Linux solch eine wie die oben beschriebene ist, bezweifle ich stark und bestätigen mir eigentlich die ständigen Forderungen der KDE-Entwickler an das gcc-Team. Mal ganz abgesehen von der Dauer des Compilierens eines C++-Programms im Vergleich zu einem C-Programm.
Ein kürzlicher Blick in die KDE-Sourcen und wieviel Stringvergleiche da in der Ereignisroutine gemacht wurden (if event.object->inherits("KComboBox")) hat mir dann übriges gesagt.
Zustimmung, das ist beim Signal-Slot-Konzept genauso.
Da wird auch ein Stringvergleich gemacht? Ich dachte das man da nur einen Methodenaufruf als Overhead hat.
Aber ob das wirklich das entscheidende Performance-Problem ist?
Nein, sicher nicht. Hier gilt denke ich Kleinvieh macht auch Mist, das sind aber bestimmt nur die Spitzen vom Eisberg, wie so oft.
Stephan