Ein Angebot von

Implementierung

Ist C++ für echtzeitkritische Anwendungen sinnvoll?

| Autor / Redakteur: Christian Gröling, Frederik Hertler, Christoph Zell, Dominic Kadynski * / Martina Hafner

(Bild: gemeinfrei / CC0)

Die Objektorientierte Programmierung (OOP) in C++ hat unter vielen embedded Programmierern den Ruf nicht so performant zu sein wie die Strukturierte Programmierung (SP) in C. Insbesondere bei Programmteilen, die mit kleinen Abtastraten arbeiten (<1 ms), so die Argumentation, muss nach wie vor stark auf Rechenzeit-Overhead geachtet werden. Hierdurch wird C++ meist von vornherein ausgeschlossen.

Dennoch möchte man bei sinkenden Entwicklungszeiten und steigender Anzahl von Programmierern an einem Projekt die bekannten Vorteile der Objektorientierung nutzen. Das Ziel dieser Veröffentlichung ist es daher, aufzuzeigen mit welchen Rechenzeit-Einbußen bei Verwendung von OOP mit C++ im Vergleich zu SP in C zu rechnen ist. Weiterhin soll die Frage beantwortet werden, ob dies wirklich ein Ausschlusskriterium für den Einsatz von C++ in echtzeitkritischen Anwendungen bedeutet.

Die SP in C unterscheidet sich stark von der OOP in C++. Ein direkter Rechenzeit-Vergleich beider Programmierstile ist hierdurch kaum möglich. Hier sollen daher die wichtigsten elementaren Bausteine beider Sprachen miteinander verglichen werden.

Untersucht werden die in Tabelle 1 angegebenen Szenarien. Für jedes Szenario wird jeweils ein Programmstück mit einem Compiler in Objektcode übersetzt und anschließend in Assemblercode konvertiert. Der Assemblercode erlaubt einen direkten Vergleich zwischen C und C++.

Weiterhin kann durch Zählen der benötigten CPU-Zyklen eine Abschätzung getroffen werden, mit wie viel Overhead bei C++ zu rechnen ist. Bei den Szenarien wird jeweils zwischen direkten und indirekten Aufrufen unterschieden. Unter einem direkten Aufruf versteht man den Zugriff auf ein Objekt / eine Funktion ohne Zwischenschritt.

Demgegenüber steht der indirekte Aufruf - ein Zugriff auf ein Objekt/Funktion über einen Zeiger oder Referenz. Für die Untersuchungen wird die Prozessorarchitektur „Cortex-M3“ der Firma ARM verwendet [1][2]. Das Übersetzen des C++ Codes und das Auslesen des Assembler Codes wird mit gnu gcc in der Version 4.9.3 durchgeführt.

Damit der Assemblercode die Realität möglichst genau wiedergibt, wird beim Aufruf des gcc stets die Optimierungseinstellung -o2 verwendet.

Kommentar zu diesem Artikel abgeben

Schreiben Sie uns hier Ihre Meinung ...
(nicht registrierter User)

Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
Kommentar abschicken
copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 44600617 / Implementierung)