Dynamische Speicherallokation Flashcards
Wofür benutzt man Speicherallokationen?
Wenn die benötigte Daten- und Speichermenge beim Programmieren unbekannt ist
Was bedeutet allokieren?
Das Reservieren von Speicher
Was versteht man unter Statische Speicherallokation?
Wenn der Programmcode vorgibt, wieviel Speicher benötigt wird
Was ist das Problem bei statischer Speicherallokation?
Während das Programm läuft, kann kein zusätzlicher Speicher genutzt werden; worst case muss für Speicherbedarf betrachtet werden
Was versteht man unter worst case?
Die Speicherung von Daten benötigt das Maximum an Ressourcen wie z.B. Laufzeit und Speicherplatz; wird auch als Klassifikation von Problemen genutzt
Was versteht man unter Dynamische Speicherallokation?
Wenn während der Laufzeit Speicher reserviert, genutzt und freigegeben wird. Der Programmierer kann den Speicher selbst verwalten und kontrolliert die Lebenszeit direkt
Wie funktioniert Dynamische Speicherallokation in C++?
Mithilfe von Pointern und dem “new”-Operator wird neuer Speicher für Speicherobjekte wie z.B. Variablen oder Felder reserviert. Der Pointer zeigt auf die Adresse des Speicherobjektes
Beispiel: int *b= new int (10)
Wie gibt man Speicher frei in C++ und warum ist das notwendig?
Mit dem “delete”-Operator, um den Arbeitsspeicher nicht zu überfüllen, was zum sonst Absturz führen könnte
Beispiel: int *b= new int (10);
delete b;
Wie sieht eine statisch automatische Speicherallokation aus?
Die Lebenszeit wird beim Compilieren bestimmt; Speicher wird per Deklaration der Variablen allokiert und auf dem Stack angelegt; Freigabe des Speichers bei Ende des Funktionsrumpfes
Wie sieht eine dynamische Speicherallokation aus?
Speicher wird durch Schlüsselwort “new” allokiert; Pointer muss verwendet werden, da der new-Operatoren die Speicheradresse des allokierten Speichers liefert; Pointervariable wird im Heap gespeichert; Rumpfende gibt nur Stackspeicher frei; Heapspeicher muss mit dem Schlüsselwort “delete” freigegeben werden
Welche Probleme entstehen bei Speicherallokationen?
Größere Programme allokieren viel Speicher, der freigegeben werden muss, ansonsten füllt sich der Arbeitsspeicher bis hin zum Absturz; Pointer können zu Speicherzugriffsfehlern führen; sorgfältige Verwaltung notwendig
Was versteht man unter dem Wert “nullptr” bzw. “NULL”
Einen speziellen Wert, den man benutzt um nicht initialisierte Pointer mit ungültigen Adressen anzeigen zu lassen; erfolglose Versuche von Speicherallokationen anzuzeigen, sowie Freigaben von Speicher zu markieren
Beispiel: int *a= nullptr;
Was ist ein Memory Debugger?
Ein Debugger, welcher alle Speicherallokationen, Speicherfreigaben und Speicherzugriffe verfolgt und protokolliert und zudem noch Fehlermeldungen liefert, falls Probleme vorliegen. Er kann also Memory leaks auffinden, die man als Speicherlecks bezeichnet.
Was versteht man unter “Memory leaks”?
Übersetzt nennt man das Speicherlecks. Speicherlecks sind Speicherplätze, die belegt werden, jedoch weder freigegeben, noch genutzt werden können