www.wikidata.de-de.nina.az
Der dynamische Speicher auch Heap engl fur Halde Haufen Haldenspeicher oder Freispeicher ist ein Speicherbereich aus dem zur Laufzeit eines Programms zusammenhangende Speicherabschnitte angefordert und in beliebiger Reihenfolge wieder freigegeben werden konnen Die Freigabe kann sowohl manuell als auch mit Hilfe einer automatischen Speicherbereinigung erfolgen Eine Speicheranforderung aus dem Heap wird auch dynamische Speicheranforderung genannt Sie dient den Programmen dazu uber den vom Programmcode selbst und den fix reservierten Datenfeldern und dem Stack Stapelspeicher belegten Speicher hinaus noch zusatzlichen Pufferspeicher zur Verfugung zu haben Fur die Anwendungsentwicklung bedeutet die dynamische Speicherverwaltung einen erheblichen zusatzlichen Aufwand und bildet eine haufige Fehlerquelle insbesondere fur Speicherlecks Ein typischer Fehler ist zum Beispiel dass Referenzen auf dynamisch belegten Speicher unbeabsichtigt uberschrieben werden und der ursprunglich referenzierte Bereich nicht mehr freigegeben werden kann Umgekehrt konnen auch Referenzen auf bereits wieder freigegebenen Speicher bestehen bleiben Solche Referenzen bezeichnet man als hangende Zeiger Inhaltsverzeichnis 1 Unterschied zum Stack 2 Unterstutzung von dynamischen Speicheranforderungen in Programmiersprachen 3 Speicherverwaltung 3 1 Implementierung 4 Siehe auch 5 WeblinksUnterschied zum Stack BearbeitenDer Unterschied zum Stack besteht darin dass beim Stack angeforderte Speicherabschnitte in der umgekehrten Reihenfolge wieder freigegeben werden mussen in der sie angefordert wurden Dies schrankt die Wiederverwendung nicht langer benotigter Stackbereiche ein ebenso muss eine Funktion ihre Stack Speicheranspruche vor ihrer Ruckkehr zu der aufrufenden Funktion aufgeben Beim Stack spricht man auch von automatischer Speicheranforderung Der Zeitaufwand bei einer automatischen Speicheranforderung zur Laufzeit ist in der Regel deutlich geringer als bei der dynamischen Speicheranforderung Da fur den Stack meist nur ein kleiner Speicherbereich reserviert wird kann bei intensiver Nutzung durch sehr grosse oder sehr viele Anforderungen ein unerwunschter Programmabbruch wegen Stack Uberlaufes erfolgen Unterstutzung von dynamischen Speicheranforderungen in Programmiersprachen BearbeitenProgrammiersprachen unterstutzen die dynamische Speicheranforderung auf unterschiedliche Weisen In ISO C gibt es dafur beispielsweise die Funktionen malloc calloc und realloc Mit der Funktion free wird der Speicher dann wieder freigegeben In ISO C gibt es ausser den bereits von C ubernommenen Funktionen die Moglichkeit Speicher dynamisch mit Hilfe von new anzufordern bzw mit delete wieder freizugeben Speicherverwaltung BearbeitenIm Vergleich zum Stack ist die Verwaltung des Heaps durch die Laufzeitumgebung aufwandiger Speicherbereiche sollen jederzeit von der Anwendung angefordert und in beliebiger Reihenfolge auch wieder freigegeben werden konnen Die Grosse der Bereiche sowie der Zeitpunkt der Anforderung oder Freigabe sind dabei unvorhersagbar An die dynamische Speicherverwaltung werden daher die folgenden teils widerspruchlichen Anforderungen gestellt Hohe Geschwindigkeit Effiziente Speichernutzung Geringer VerwaltungsaufwandDurch das spatere Freigeben eines Blocks kann es zu externer Fragmentierung kommen Eine automatische Speicherbereinigung kann die freien Speicherbereiche wieder vereinigen so dass grossere freie Blocke zur Verfugung stehen Fur Echtzeit Anwendungen kann eine dynamische Speicherverwaltung ungeeignet sein da sowohl die Laufzeit als auch die erfolgreiche Allokation garantiert werden mussen Implementierung Bearbeiten Fur die Verwaltung der freien Blocke kommen verschiedene Datenstrukturen zum Einsatz verkettete Listen Buddy Systeme Heap artige Strukturen SuchbaumeSiehe auch BearbeitenGarbage Collection Virtuelle SpeicherverwaltungWeblinks BearbeitenHeap Fragmentierung Problem und Losungsansatze Abgerufen von https de wikipedia org w index php title Dynamischer Speicher amp oldid 219215415