Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Grundlagen der Programmierung: Basiswissen

Speicherverwaltung

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Der Programmierer muss in vielen Programmiersprachen die Speicherverwaltung übernehmen. Dabei muss der Speicherort, welcher einer Variablen oder einem Objekt zugewiesen wurde, über deren bzw. dessen gesamten Lebenszyklus verwaltet werden.

Transkript

Es gibt eine Sache, worüber wir uns noch gar nicht so richtig unterhalten haben, und das ist die Speicherverwaltung. Das liegt daran, dass wir in JavaScript uns darum nicht kümmern müssen. Wir erzeugen Variablen und Objekte, wir benutzen sie, und dann vergessen wir sie wieder. Aber das ist nicht überall so. In vielen Sprachen können Sie nicht einfach ein Objekt erzeugen, es nutzen und es dann vergessen. Sie müssen dem zugehörigen Speicher, wo das Objekt abgelegt wird, extra eine Verwaltungsschicht überziehen, und zwar über den gesamten Lebenszyklus dieses Objektes. D.h., wir können an dieser Stelle nicht einfach ein Objekt erzeugen, verwenden, und dann es vergessen, sondern wir müssen ganz explizit zunächst einmal einen Speicherplatz finden auf unserem Computer. Und wenn wir diesen Speicherplatz gefunden haben, erst dann können wir ein Objekt erzeugen und in diesem Speicherplatz auch tatsächlich speichern, es dort hinterlegen. Wir können daraufhin das Objekt benutzen, wir können die Eigenschaften abfragen, wir können mit den Methoden das Objekt manipulieren usw. Und wenn wir das Objekt nicht mehr brauchen, das ist ganz wichtig, dann geben wir diesen Speicherplatz an diesem Ort auch wieder frei, und er kann von anderen Objekten verwendet werden. Soweit, so gut. Wenn wir jetzt ein zweites Objekt erzeugen wollen, auch dann müssen wir zunächst einmal einen freien Speicherplatz finden. Den haben wir hier. Wir erzeugen dann das Objekt und speichern es an dieser Stelle. Wir nutzen das Objekt, und wenn wir jetzt an dieser Stelle aufhören, haben wir genau das Problem. Das nennt sich Speicherleck. Das ist bei ein, bei zwei Objekten noch überhaupt kein Problem. Aber stellen Sie sich vor, Sie haben hunderte davon, und Sie verwenden davon im Laufe eines Programmes das eine oder das andere, aber Sie vergessen jedes Mal, diesen Speicherplatz auch tatsächlich freizugeben. Dann haben wir der Reihe nach irgendwelche Speicherorte auf unserem Computer, die gar nicht mehr gebraucht werden. Und wenn dieser Arbeitsspeicher knapp wird, dann kann das bald dazu führen, dass unser Programm mangels Speicher entweder sehr, sehr langsam wird oder sogar ganz abstürzt. Ein anderes Problem ist, wenn Sie auf ein Objekt zugreifen wollen, wie hier links "Mein Objekt", und dieses Objekt hat gar keinen Speicherplatz mehr, weil wir diesen Speicherplatz ja schon freigegeben haben, dann nennen wir das einen "hängenden Zeiger". Dieses "Mein Objekt" ist ja nur ein Zeiger auf diesen entsprechenden Platz hier in unserem Speicher, und wenn wir diesen Speicherplatz schon freigegeben haben, dann hängt dieser Zeiger irgendwie in der Luft. Auch das kann dazu führen, dass unser Programm entweder ein unerwartetes Verhalten an den Tag legt oder gleich ganz abstürzt. Diese Speicherverwaltung hat manchmal Vorteile, weil man als Programmierer hier um einiges flexibler ist. Aber Code zu schreiben, der den Speicher richtig verwaltet, ist sehr, sehr schwierig. Wenn wir uns einen Computer anschauen, haben wir auf der untersten Ebene ja die CPU, unsere Central Processing Unit. Und auf dieser läuft ja der Maschinencode, der von dieser Speicherverwaltung abhängig ist. Und im Laufe der Computergeschichte haben sich ja verschiedene Sprachen entwickelt, ganz unten die Assembler-Sprachen, die sehr nah am Maschinencode dran sind. C ist eine der ältesten Sprachen überhaupt, und da müssen wir diese Speicherverwaltung komplett manuell machen. Das heißt, wir müssen uns darum kümmern, wo wollen wir ein Objekt ablegen, und wenn wir ein Objekt nicht mehr brauchen, müssen wir diesen Speicherplatz auch wieder freigeben. In etwas höher entwickelten Sprachen wie C++ und Objective-C, da haben wir so etwas wie eine Referenzzählung. D.h., automatisch wird mitgezählt, wie viele Objekte kennt denn momentan das Programm, wie viele sind davon schon wieder gelöscht worden? Man kann dann vergleichen, was muss ich eigentlich mit der Speicherverwaltung noch machen? Etwas weiter, in Java z.B., da gibt es dann so etwas wie eine automatische Speicherbereinigung, auf Englisch heißt das dann "Garbage Collection". D.h., in definierten Abständen schaut das Programm selbstständig nach, welchen Speicher kann ich denn jetzt eigentlich freigeben, und welchen Speicher brauche ich denn noch für mein eigenes Programm? Die modernsten und am weitesten entwickelten Sprachen wie JavaScript und ActionScript, die machen das komplett automatisch, da brauche ich mich um Garbage Collection und um Referenzzählung gar nicht mehr kümmern. Es gibt zwei Momente, wo das aber sehr hilfreich ist, diese Garbage Collection, die Referenzzählung oder allgemein die manuelle Speicherverwaltung. Entweder, wenn ich einen sehr kleinen Speicher habe, z.B. in einem Embedded System, in einem eingebetteten System, z.B. in einem Kühlschrank oder im Auto oder irgendwo, wo ich einen sehr kleinen Computer nur habe mit sehr wenig Arbeitsspeicher, wo ich sehr genau haushalten muss, wie ich mit diesem Speicher umgehe. Wenn mir die Performance meines Programms sehr wichtig ist, also bspw. auch in aufwändigen 3D-Spielen, wo ich viel Arbeitsspeicher brauche, wo ich es mir einfach nicht erlauben kann, dass irgendwelche Objekte noch im Speicher vorhanden sind, obwohl ich gar nicht mehr drauf zugreifen möchte. Normalerweise ist es allerdings bei modernen Computern so, dass wir unglaublich viel Arbeitsspeicher haben verglichen mit den Arbeitsspeichern noch vor ein paar Jahren oder vor ein paar Jahrzehnten, sodass wir in JavaScript z.B. relativ sorglos mit dieser Speicherverwaltung umgehen können, einfach deswegen, weil es unglaublich viel Speicherplatz gibt.

Grundlagen der Programmierung: Basiswissen

Steigen Sie ein in die Welt der Computerprogrammierung und verschaffen Sie sich das Grundwissen, um schon bald eigene Lösungen und Anwendungen zu schreiben.

5 Std. 38 min (64 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!