Diskussion:Embedded C++

Letzter Kommentar: vor 17 Jahren von Wilfried Elmenreich in Abschnitt Programmierrichtlinie zur Erstellung effizienten Codes

Programmierrichtlinie zur Erstellung effizienten Codes

Bearbeiten

Im Artikel steht: Embedded C++ kann auch als Programmierrichtlinie für die Erstellung von effizientem Code dienen. Selbst wenn der Quellcode schlussendlich mit einem C++ Compiler übersetzt wird, so ist das Kompilat durch das Weglassen von ressourcenhungrigen Features besser für eingebettete System geeignet. — Worauf gründet sich diese Aussage, bzw. wie kann man sie plausibel machen? --Poldi 14:27, 25. Feb. 2007 (CET)Beantworten

Die Aussage gründet sich auf ein Buch, dessen Titel ich jetzt nicht grad zur Hand hab und meine eigenen Erfahrungen und Kenntnisse in der Programmierung von Embedded Systems. Das Hauptproblem ist der Arbeitsspeicherverbrauch, die wahrscheinlich kostbarste Ressource in eingebetteten Systemen bei denen meist Arbeitsspeicher und Programmspeicher getrennt sind. Viele objektorientierte Eigenschaften von C++ erfordern aber eine Überschreibbarkeit von Objekteigenschaften, sodass entsprechend viel RAM-Speicher für jede Objektinstanzierung verbraucht wird. Darum wird OOP in kleinen (8-Bit) Embedded Systems für gewöhnlich zugunsten von objektartig strukturiertem C-Code aufgegeben. Will man dennoch ein solches System objektorientiert programmieren, so ist es wichtig zu wissen, welche Features die Speicherfresser sind diese notgedrungen vermeiden. Die Komplementärmenge von EC++ enthält die meisten dieser speicheraufwendigen Programmiertechniken -> ergo kann man EC++ als Guideline für eingebetteten Code nehmen. -- Wilfried Elmenreich 15:28, 25. Feb. 2007 (CET)Beantworten
Nachtrag: Das Buch war Bollar, Homann, Köhn: "C und C++ für Embedded Systems", Mitp, 2006. -- Wilfried Elmenreich 15:40, 25. Feb. 2007 (CET)Beantworten
Was meinst du mit Viele objektorientierte Eigenschaften von C++ erfordern aber eine Überschreibbarkeit von Objekteigenschaften, und inwiefern wird dadurch der Arbeitsspeicher belastet? --Poldi 18:05, 25. Feb. 2007 (CET)Beantworten
Dabei geht's eigentlich um virtuelle Methoden und virtuelle Basisklassen. In das Klassenobjekt wird ein Zeiger (Virtual Base Pointer) und eine Tabelle für die virtuellen Methoden eingefügt und infolge dessen Arbeitsspeicher für den Zeiger und Programmspeicher für die Tabelle verbraucht. Andere ECPP-Komplementärfeatures sind wiederum zwiespältig: Während man mittels Klassentemplates die Rechenzeit für die Konstrukturen zur Laufzeit einschränken kann, also ein "gutes" Feature, sind Mehodentemplates mit Vorsicht zu verwenden, da jede Instanz zusätzlichen Code erzeugt. -- Wilfried Elmenreich 11:20, 28. Feb. 2007 (CET)Beantworten
Der erhöhte Arbeitsspeicherverbrauch entsteht also durch den zusätzlichen Zeiger. Genau das lässt sich aber durch Schablonen (Templates) vermeiden, und die Container der C++-Standardbibliothek verzichten aus diesem Grund auf objektorientierte Programmierung. Die Empfehlung, Embedded C++ als Programmierrichtlinie für die Erstellung von effizientem Code zu verwenden, ist deshalb nicht stichhaltig; im Gegenteil, dieser Programmierstil sollte sogar vermieden werden. --Poldi 18:06, 28. Feb. 2007 (CET)Beantworten
ok, hast mich überzeugt, hab den Absatz wieder raus gegeben. -- Wilfried Elmenreich 01:45, 3. Mär. 2007 (CET)Beantworten

Zeitpunkt der Erstveröffentlichung von EC++

Bearbeiten

Im Artikel steht: Die aktuelle Spezifikation der Sprache wurde 1999 veröffentlicht. — Interessant zu wissen wäre der Zeitpunkt der Erstveröffentlichung. --Poldi 14:54, 25. Feb. 2007 (CET)Beantworten

Stimmt, das war schon 1996: [1] - ist eingebaut. -- Wilfried Elmenreich 15:36, 25. Feb. 2007 (CET)Beantworten