Performanceverlust bei Exceptions



  • Also auf jeden Fall ist der Performance-Verlust so gross, dass es besser ist,

    func()
    {
    try
    {
    while( true)
    {
      FehlerFunktion();
    }
    }
    catch(...)
    {
    }
    }
    

    als

    func()
    {
    while( true)
    {
      try
      {
        FehlerFunktion();
      }
      catch(...)
      {
      }
    }
    }
    

    Und wieviel Performance-Verlust bringt es, wenn die Funktion func() nur 1x aufgerufen wird?



  • Hallo,
    das ist doch Stochern in der Brühe. Die Kosten für Exception-Handling unterscheiden sich a) extrem von Compiler zu Compiler und b) hängen sie auch von der Art der Anwendung ab.

    Bei vielen modernen Compilern kosten Exceptions erst etwas, wenn tatsächlich eine Ausnahme ausgelöst wurde. Daher kann es dir sogar passieren, dass der Code mit Exception-Handling schneller als der ist, der Fehlerflags per if auswertet.

    Also, folge Peters rat und lass deinen Profiler arbeiten. Wenn du nicht weißt wie dieser funktioniert, lerne es.



  • werden exceptions nicht auf OS ebene in einen interrupt eingehangen, welcher dann ausgelöst wird (auch hardwaremässig, z.B. bei access violations)? bin mir nicht sicher, aber ich hab sowas ma gehört, falls das so ist, dann muss das OS in den untersten ring um darin rumzufummeln und dann wieder hoch die ringe, somit ist das einige hundert zücklen teuer.

    am I wrong?

    rapso->greets();



  • am I wrong?

    Kann es sein, dass du SEH mit Standard-C++ Exceptions verwechselst?
    Vergiss nicht, hier ist Standard-C++ und da ist nicht festgelegt, wie Exception-Handling implementiert wird.
    Die Handhabung von Exceptions ist wie bereits gesagt Compiler- und OS-abhängig. Wenn du also wissen willst, wie genau das bei dir aussieht, musst du in die Dokumentation deines Compilers schauen (z.B. in die MSDN: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/html/_core_exception_handling_topics_.28.c.2b2b29.asp))

    Fakt ist, dass es Compiler (wie z.B. den VC6) gibt, bei denen Exceptionhandling immer etwas kostet (auch wenn keine Exception geworfen wird) und solche bei denen Exception-Handling erst mit dem Auftreten einer Ausnahme mit zusätzlichen Kosten verbunden ist.

    Wen's interessiert: Stanley Lippman beschreibt in seinem Buch "Inside the C++ Object Model" sehr ausführlich wie Exception-Handling implementiert werden könnte.



  • rene: das ist ein sehr relatives "besser". klar wirds schneller, wenn du dich weniger genau fuer fehler interessierst. am schnellsten ist es, du laesst es ganz raus.



  • Original erstellt von HumeSikkins:
    Bei vielen modernen Compilern kosten Exceptions erst etwas, wenn tatsächlich eine Ausnahme ausgelöst wurde. Daher kann es dir sogar passieren, dass der Code mit Exception-Handling schneller als der ist, der Fehlerflags per if auswertet.

    Meinereiner optimiert normalerweise lieber auf Größe, weil man das leichter und unabhängig von der Eingabe messen kann :). Und da sind Exceptions schon arg 'teuer', weil der Compiler idR viel 'unwind'-Code erzeugen muss.



  • Auf Größe optimieren ?
    Du kannst niemals anhand der Länge des C++ Codes sehen ob der compilierte Code kürzer ist. Unter umständen verhält es sich genau umgekehrt.



  • Und 'auf Geschwindigkeit optimieren' hat deiner Meinung nach also etwas damit zu tun, wie schnell ich ein Programm eintippen kann? Eigenwillige Definition.



  • Hääää ????
    Hab ich irgendwie etwas in dieser Art angedeutet ?
    Du bist doch derjenige, der glaubt, der kürzere Code ist der schnellere.
    Optimieren ist, wenn man die Stellen im Code die Zeit fressen durch schnelleren Code ersetzt.
    Die Länge des Codes hat damit nichts zu tun.
    Du solltest erst lesen,überlegen !!! und dann erst hier posten.



  • Original erstellt von <Rödel>:
    Hääää ????

    Da sagte doch mal jemand was zu den multiplen Satzzeichen ...

    Du bist doch derjenige, der glaubt, der kürzere Code ist der schnellere.

    Sicher, sicher. Schneller zu tippen.

    Die Länge des Codes hat damit nichts zu tun.
    Du solltest erst lesen,überlegen !!! und dann erst hier posten.

    Darf ich das siggen?

    [ Dieser Beitrag wurde am 01.07.2003 um 21:41 Uhr von Daniel E. editiert. ]



  • krank.
    *Sicher, sicher. Schneller zu tippen.
    *
    Spitzenansicht übers 'optimieren'
    Lass bei solchen Fragen deine Hände lieber in der Hose als auf der Tastatur.
    (Diesen Text kannst du ruhig wieder zitiren !)



  • Original erstellt von <@Daniel E.>:
    krank.

    Schau mal wieder rein, wenn es dir besser geht.

    Aber fein, ich bin ja heute in Trollfütterstimmung. Wo kannst zB Du in »Meinereiner optimiert normalerweise lieber auf Größe, weil man das leichter und unabhängig von der Eingabe messen kann :). Und da sind Exceptions schon arg 'teuer', weil der Compiler idR viel 'unwind'-Code erzeugen muss.« einen Bezug (a) zur Ausführgeschwindigkeit, (b) zur Quelltextlänge herstellen? Ach, da ist ja gar keiner? Eben, das versuche ich dir(?) seit 3 Beiträgen zu verklickern ... damit erkläre ich den Thread für *hammerschlag* geschloßen.

    [ Dieser Beitrag wurde am 02.07.2003 um 14:35 Uhr von Daniel E. editiert. ]



  • [i]]@Daniel E.
    [/i
    Du bist echt der Hit in diesem Forum. Von nichts ne Ahnung und alles wieder so rumdrehen als ob es deine Worte gewesen währen.
    Obertroll.



  • damit erkläre ich den Thread für *hammerschlag* geschloßen

    Du erklärst und ich führe aus 😃


Anmelden zum Antworten