karsten76: Stack und Heap

Beitrag lesen

Hallo,

Die Verwendung von "statisch" ist reichlich unklug, denn unter diesem Attribut versteht man bei OOP etwas gänzlich anderes als das eine Variable (und auch ein Objekt ist eine Variable) einfach auf dem Stack abgelegt wäre.

Diese Bezeichnung ist in diesem Kontext korrekt. In der Tat ist es aber wichtig genau zwischen statischer Speicherbelegung und 'static' Schlüsselwort zu unterscheiden.

und noch allgemeiner (etwa in C oder Assembler) versteht man unter "statisch" wieder etwas anderes - nämlich Variablen, deren Speicheradresse und Speicherbedarf bereits beim Compilieren festgelegt wird.

Ich würde das nicht als 'noch allgemeiner' sondern als die eigentliche Bedeutung sehen.

Statische Objekterzeugung heißt, dass der Speicher des angegebenen Objekttyps eingebettet wird. Das heißt, es wird die für das Objekt benötigte Speichergröße reserviert und direkt eingebettet, entweder auf dem Stack während der Ausführung einer Methode oder aber als eingebettete Instanz in einem anderen Objekt.
(z.B. QLabel label;)

Dynamische Objekterzeugung heißt, dass die benötigte Speichergröße auf dem Heap (dynamisch zugeteilter Speicher) belegt wird. Am Ende dieser Speicherbelegung erhält der Programmierer einen Zeiger (Speicheradresse) auf den belegten Speicher. Diesen Zeiger kann er wiederum in einer statisch oder dynamisch erzeugten Zeigervariablen speichern, um mit dem Objekt arbeiten und es später freigeben zu können.
(z.B. QLabel *label;)

Was die Verwendung angeht, sollte man Wissen, dass der Zugriff auf statisch erzeugte Objekte bedeutend schneller ist, da in diesem Fall kein Zeiger dereferenziert werden muss und keine Seitenfehler auftreten.

„Diese statische Erzeugung ist übrigens eine Spezialität von C++. Andere Sprachen, wie Pascal/Delphi, C#, Visual Basic(.NET) und Java kennen keine statisch erzeugten Objekte. In diesen Sprachen werden Objekte immer dynamisch erzeugt.“

Das ist in dieser Form schlicht und ergreifend – falsch. Das ist sowas von falsch, man sollte dem Mann das Schreiben von Lehrtexten zur Programmierung verbieten.

Dem kann ich mich nur anschliessen.