Forum: Mikrocontroller und Digitale Elektronik AVR-Tutorial Aussagen über C++


von TriHexagon (Gast)


Lesenswert?

Hi,

wollte mir vorhin noch was zum AVR Assembler anschauen, da bin ich 
wieder auf folgende Aufzählung im Startartikel gestoßen:
1
Nicht unbedingt nutzen sollte man (oder man muss nachsehen, wie blöd sich der Compiler anstellt):
2
3
 - STL (Standard Template Library)
4
 - Mehrfachvererbung
5
 - Virtuelle Methoden (muss man fallweise entscheiden, zumindest bei avr-gcc umständlich)
6
 - Allzu verrückte oder neue Features wie
7
     + Verschachtelte Klassen
8
     + Automatische Typerkennung (auto-Schlüsselwort)
9
     + Laufzeit-Typprüfung
10
     + Anonyme Funktionen (Lambda-Ausdrücke)
11
 - new- und delete-Operator (Speicherverwaltung allgemein)

Bis auf zwei Punkte finde ich die Liste in Ordnung, aber verstehe nicht 
was "Automatische Typerkennung" und "Anonyme Funktionen" darin zu suchen 
haben.

Type Inheritance ist nur für den Compiler interessant, ob ich das 
Programm für x86 oder AVR schreibe macht da keinen Unterschied. Am 
Kompilat ist nicht zu erkennen, ob dieses Feature eingesetzt wurde.

Anonyme Funktionen dürften zur Laufzeit kaum einen Unterschied machen. 
Der Compiler kann daraus einfach eine Funktion machen, die er normal 
übersetzt, nur hat sie halt sozusagen keinen ansprechbaren Namen. 
Overhead ist nur der Funktionszeiger der vom Aufrufenden benötigt wird. 
Das ist aber nicht viel und wenn anonyme Funktionen in dem Fall nützlich 
sind, dann kommt man ohne Funktionszeiger wahrscheinlich auch nicht aus. 
Ich weiß zwar nicht mit Sicherheit, ob der avr-g++ das so umsetzt, 
wüsste aber nicht, wieso er das nicht so machen sollte.

Täusche ich mich an einem Punkt oder wie ist der Autor zu seiner Aussage 
gekommen? Ich kann mir das nur erklären, dass die Aussagen aus einer 
Zeit kommen, als der avr-g++ noch kein C++11 konnte.

von Wilhelm M. (wimalopaan)


Lesenswert?

TriHexagon schrieb:

>  - STL (Standard Template Library)

ist gar nicht für AVR verfügbar

>  - Mehrfachvererbung

kann man einsetzen

>  - Virtuelle Methoden (muss man fallweise entscheiden, zumindest bei
> avr-gcc umständlich)

er zielt wohl darauf ab, dass die vtable ins RAM kopiert wird und dort 
je Typ mindestens 12 Byte belegt und für Funktionsaufrufe eine 
zusätzliche Indirektion hinzu kommt

>  - Allzu verrückte oder neue Features wie
>      + Verschachtelte Klassen
>      + Automatische Typerkennung (auto-Schlüsselwort)
>      + Laufzeit-Typprüfung
>      + Anonyme Funktionen (Lambda-Ausdrücke)

Blödsinn

>  - new- und delete-Operator (Speicherverwaltung allgemein)

nicht für AVR target implement.

> Bis auf zwei Punkte finde ich die Liste in Ordnung, aber verstehe nicht
> was "Automatische Typerkennung" und "Anonyme Funktionen" darin zu suchen
> haben.

s.o, gehört m.E. auch nicht in diese Liste

> Type Inheritance

Du meinst "type inference"

> ist nur für den Compiler interessant, ob ich das
> Programm für x86 oder AVR schreibe macht da keinen Unterschied. Am
> Kompilat ist nicht zu erkennen, ob dieses Feature eingesetzt wurde.

Gilt generell: in asm gibt es keine DT mehr.

> Anonyme Funktionen dürften zur Laufzeit kaum einen Unterschied machen.
> Der Compiler kann daraus einfach eine Funktion machen, die er normal
> übersetzt, nur hat sie halt sozusagen keinen ansprechbaren Namen.
> Overhead ist nur der Funktionszeiger der vom Aufrufenden benötigt wird.
> Das ist aber nicht viel und wenn anonyme Funktionen in dem Fall nützlich
> sind, dann kommt man ohne Funktionszeiger wahrscheinlich auch nicht aus.
> Ich weiß zwar nicht mit Sicherheit, ob der avr-g++ das so umsetzt,
> wüsste aber nicht, wieso er das nicht so machen sollte.

lambda-expressions sind ein sehr gutes Feature, gerade für den Einsatz 
auf µC und auch für den Einsatz im Zusammenhang mit templates und TMP.


> Täusche ich mich an einem Punkt oder wie ist der Autor zu seiner Aussage
> gekommen? Ich kann mir das nur erklären, dass die Aussagen aus einer
> Zeit kommen, als der avr-g++ noch kein C++11 konnte.

Manches sind eben Mythen, die immer wieder kolportiert werden, aber 
damit nicht richtiger ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.