Forum: Compiler & IDEs vtable-layout und avr-g++


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Raoul D. (raoul_d219)


Bewertung
1 lesenswert
nicht lesenswert
Hallo zusammen,

mir ist der Aufbau der vtables im Compilat des avr-g++ unklar. Was ich 
vorgefunden habe, sieht etwa so aus:

Fall 1)
Basisklasse hat keinen(!) virtuellen dtor. Dies darf man natürlich nur 
machen, wenn man Objekte nicht polymorph zerstört, also kein delete 
verwendet.

(Einträge als Zeigerwerte (hier je ein word)):
1
0 
2
0 
3
f1
4
f2
5
...

Fall 2)
Basisklasse hat einen virtuellen dtor. Jetzt benötigt man natürlich auch 
noch new, delete, delete. Zum Testen sind das erst mal leere 
Realisierungen, denn sie werden im Beispielcode auch gar nicht 
verwendet. Damit ergibt sich:
1
0 
2
0 
3
dtor
4
dtor
5
f1
6
f2
7
...

Nun ist mir folgendes nicht klar:

a) welche Bedeutung haben die beiden ersten (immer 0) Einträge in der 
vtable?
b) warum wird hier zweimal ein dtor eingetragen?

von Johann L. (gjlayde) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert

von Markus (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
"dtor" ? virtual destruction pointer?

Ich dachte, "delete" auf dem Arduino würde sowieso nicht richtig 
funktionieren, weil man einen "garbage collector" braucht, damit keine 
zu großen Speichertotbereiche entstehen.

von S. R. (svenska)


Bewertung
0 lesenswert
nicht lesenswert
Nicht denken, wissen.
Speicherfragmentierung ist eine Sache, "delete funktioniert nicht" ist 
eine andere Sache.

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
S. R. schrieb:
> Speicherfragmentierung ist eine Sache, "delete funktioniert nicht" ist
> eine andere Sache.

Und ein Garbage Collector ist nochmal was ganz anderes.

von Harry (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
Autor: S. R. (svenska)
>Nicht denken, wissen.
>Speicherfragmentierung ist eine Sache, "delete funktioniert nicht" ist
>eine andere Sache.

Ja und da wäre noch:
nicht labern, lesen lernen.
Da steht "funktioniert nicht richtig".

von chris (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hier ist eine schöne Diskussion über das delete beim AVR-GCC:

Beitrag "Re: c++ new und delete"

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
Harry schrieb:
> Da steht "funktioniert nicht richtig".

Ist trotzdem falsch.

Oliver

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
chris, Markus, Harry: Verwarnung wegen Verstoßes gegen die Forenregeln.
Bleib' bei einem Namen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.