C++ - Ausnahme overhead

Warum machen die embedded-Plattform-Entwickler kontinuierlich zu entfernen versuchen, die Nutzung C++ exceptions aus Ihrer SDKs?

Beispielsweise Bada SDK schlägt folgenden workaround für die Ausnahme-Nutzung, die sieht außergewöhnlich ugly:

 result
 MyApp::InitTimer()
 {
    result r = E_SUCCESS;

    _pTimer = new Timer;

    r = _pTimer->Construct(*this);
    if (IsFailed(r))
    {
        goto CATCH;
    }

    _pTimer->Start(1000);
    if (IsFailed(r))
    {
        goto CATCH;
    }

    return r;
 CATCH:
     return r;
 }

Was sind die Gründe für dieses Verhalten?

Soweit ich weiß, ARM Compiler vollständig unterstützt C++ exceptions - und das konnte eigentlich nicht sein, die Materie. Was sonst? Ist der Aufwand der exception-Nutzung und unwindings auf ARM Plattformen wirklich, dass GROßEN verbringen viel Zeit damit, solche workarounds?

Vielleicht etwas anderes ich bin mir nicht bewusst?

Danke.

  • +1 für beschreibt Sie als außergewöhnlich hässlich...
  • Ein großer Grund ist alt-code. Wenn code geschrieben wird, Ausnahme, von Anfang an sicher es ist nicht exception-sicher. Dies ist eine von Googles großen Gründe, warum Sie nicht verwenden, Ausnahmen: nicht mit zu beginnen, jetzt sind wir irgendwie steckengeblieben mit dieser Entscheidung.
  • Ich würde vorschlagen, die änderung der "usage" - tag (das scheint wie eine nicht-op zu mir) "embedded".
  • Meinst du "warum machen Sie keine Ausnahmen zulassen in der Plattform" oder "warum machen die Leute nicht Ausnahmen" in einer mehr Allgemeinen Art und Weise? Für die ehemaligen, deaktivieren Ausnahmen ist ein Weg zur Gewährleistung der Kompatibilität mit Plattformen, über die "Embedded C++" Teilmenge. en.wikipedia.org/wiki/Embedded_C%2B%2B
  • Viele Antworten hier. Es war ein post speziell über Ausnahmen. setjmp() und longjmp() mehr kontrolliert. Jedes Objekt bekommt oft eingegeben, in der Ausnahme von Tabellen und herauszufinden, die Tabelle in eine pro-Datei, die Zusammenstellung ist nicht optimal. Normalerweise ist dies nicht ein Schmerz, wenn er sitzt auf der Festplatte. Embedded-Anwendungen oft nicht über eine Festplatte. Auch heute noch (2013), g++ Entwickler versuchen immer noch, um diese zu optimieren Tabellen. Sie können so groß wie der code in einigen Fällen!
Schreibe einen Kommentar