2010-07-18 2 views
5

Ich möchte eine Liste von C++ - Features kompilieren, die für die Verwendung in eingebetteten Systemen nicht ratsam sind (und die dazu führen können, dass c über C++ empfohlen wird). Bitte versuchen Sie, warum hinzuzufügen, wenn Sie wissen, oder fügen Sie Ihren Grund zu den Antworten anderer hinzu.Welche C++ - Funktionen sollten für die eingebettete Entwicklung vermieden werden

Hier ist eine für den Anfang (der einzige, den ich kenne)

  • Dynamische Polymorphismus, weiß nicht, warum, aber jemand sagte, es ist „teuer“

Antwort

4

Bestimmte Funktionen erfordern Laufzeitunterstützung. Wenn Sie die erforderliche Unterstützung nicht benötigen, sollten Sie diese Funktionen vermeiden. Insbesondere müssen die folgenden Merkmale in der Regel zusätzliche Laufzeitunterstützung:

  • Ausnahmen
  • RTTI
  • dynamische Speicherzuweisung
  • virtuelle Vererbung (etwas unsicher über diese)

Die Leute erwähnen normalerweise auch Templates, aber sie sind nur eine erweiterte Makrofunktion - also können Sie sie frei in eingebetteten Systemen verwenden. Trotzdem möchten Sie sie möglicherweise vermeiden, da sie nach der Kompilierung zu einem Aufblähen des Codes führen können.

Ihr eingebettetes System sollte mit einer Dokumentation geliefert werden, die besagt, dass, wenn überhaupt, Laufzeitunterstützung für C++ (und andere) verfügbar ist.

+5

Die virtuelle Vererbung benötigt keine Laufzeitunterstützung. Es kommt jedoch zu einem Kostenfaktor (eine zusätzliche Indirektion beim Zugriff auf Basisklassenmitglieder). Wenn Sie diese Laufzeitkosten vermeiden müssen, müssen Sie die virtuelle Vererbung vermeiden. – sbi

3

Sie wählen sollten Funktionen je nach Ihr Gerät. Es könnte für einige Funktion sinnvoll sein oder auch nicht. Es hängt von seiner Architektur ab. Zum Beispiel hat Google eine reduzierte Version von C++ - Compiler für Android-Plattform. Eine einfache allgemeine Regel besteht darin, Konstruktionen zu vermeiden, die zu schwerem Laufzeitcode führen.

9

Die Joint Strike Fighter Kodierungsstandards hier: http://www2.research.att.com/~bs/JSF-AV-rules.pdf sind ein ziemlich guter Überblick über die Verwendung von C++ für Embedded-Programmierung.

Das Verbot des dynamischen Polymorphismus ist ein Überbleibsel aus den 90er Jahren und hat keine rationale Grundlage. Es dauert nicht länger, eine virtuelle Funktion aufzurufen, als einen Schalter und einen Anruf auszuführen. Wenn Sie virtuelle Funktionsaufrufe vermeiden möchten, können Sie auch C. verwenden.

2
  1. Übermäßige Verwendung der Vorlage. Mehrere Template-Instanziierungen mit unterschiedlichen Parametern führen zu mehreren Kopien der gleichen Funktionen in Ihrem Objektcode und erhöhen daher dessen Größe, es sei denn, Ihr Compiler ist intelligent genug, um identischen Code zu falten (zB wenn die Vorlage von einem Typ T abhängt, wird Instanziierung mit int in die meisten Fälle sind identisch mit Instanziierung mit long).
    Ein Weg zur Vermeidung von Code-Größe mit Vorlagen zu erhöhen, können Sie eine unsichere Core-Version Ihres Codes schreiben, und haben dünne typsichere Vorlage Wrapper.
  2. dynamic_cast kann CPU-weise ziemlich teuer sein, weil es die Klassenhierarchie scannen und String-Vergleich von Klassennamen durchführen muss [Zitat benötigt].