04_dynamischeSpeicherverwaltung_handout_Z Flashcards
Was sind Variablen in Programmen?
Variablen sind Stellvertreter für Hauptspeicheradressen und dienen zur Datenspeicherung in Programmen.
Was sind globale Variablen und wie lange existieren sie?
Globale Variablen sind von jeder Programmstelle aus zugänglich, werden beim Programmstart erzeugt und existieren bis zum Programmende.
Wie werden globale Variablen zugewiesen und wann bleibt ihre Speicherzuteilung fixiert?
Die Speicherzuteilung für globale Variablen erfolgt durch den Compiler und bleibt fixiert.
Was sind lokale Variablen und wann werden sie erstellt und zerstört?
Lokale Variablen sind nur im jeweiligen Gültigkeitsbereich zugänglich, werden beim Eintritt in den Gültigkeitsbereich erstellt und beim Verlassen zerstört.
Warum ist dynamische Speicherverwaltung notwendig?
Dynamische Speicherverwaltung ist notwendig, um flexible Datenspeicherung zu ermöglichen, die nicht an einen Gültigkeitsbereich gebunden ist, z.B. bei der Bildverarbeitung.
Was ist der Heap und welche Rolle spielt er in der dynamischen Speicherverwaltung?
Der Heap (Haldenspeicher oder Freispeicher) ist der Bereich, in dem dynamisch Speicher allokiert wird, wobei Speicherbereiche in beliebiger Reihenfolge angefordert und freigegeben werden können.
Welche Hauptfunktionen zur dynamischen Speicherverwaltung gibt es?
Die Hauptfunktionen zur dynamischen Speicherverwaltung sind malloc()
(Speicher anfordern) und free()
(Speicher freigeben).
Welche zusätzlichen Funktionen zur dynamischen Speicherverwaltung gibt es und was machen sie?
Zusätzliche Funktionen sind calloc()
(fordert Speicher an und initialisiert ihn mit 0) und realloc()
(ändert die Größe eines bestehenden Speicherbereichs).
Wo sind die Funktionen zur dynamischen Speicherverwaltung deklariert?
Die Funktionen sind im Headerfile stdlib.h
deklariert.
Wie erfolgt der Zugriff auf dynamisch allokierten Speicher und was muss dabei beachtet werden?
Der Zugriff erfolgt über Pointer. Der Rückgabewert von malloc()
ist ein Pointer auf den Beginn des zugewiesenen Speicherbereichs und muss typischerweise gecastet werden.
Warum ist es wichtig, nicht mehr benötigten Speicher explizit freizugeben?
Es ist wichtig, Speicher freizugeben, um Speicherlecks (memory leaks) zu vermeiden, die zu Programmabstürzen führen können.
Welche Probleme können durch Speicherlecks entstehen?
Speicherlecks können zu Programmabstürzen und ineffizienter Speicherverwendung führen.
Wie vermeidet man Speicherlecks?
Speicherlecks werden vermieden durch diszipliniertes Programmieren und explizites Freigeben von nicht mehr benötigtem Speicher.
Wie wird in Sprachen wie Python, Java und C# Speicher verwaltet?
In diesen Sprachen erfolgt die Speicherfreigabe automatisch durch das Laufzeitsystem (Garbage Collector).
Was sind die Vorteile und Nachteile der automatischen Speicherverwaltung?
Vorteile: Verhindert weitgehend Speicherlecks und entlastet den Programmierer. Nachteile: Führt zu zusätzlichem Overhead und erfordert dennoch bewusste und korrekte Programmierung.