1 - Verwaltung [ID:16445]
50 von 71 angezeigt

icana 8 RENOGEN

Während der Bearbeitung der letzten Aufgaben

muss der häufig schon Speicher dynamisch allokiert und wieder freigegeben werden.

Dazu wurde Listening Counselingacağım und 5-Est plata verwendet.

In dieser Übung wollen wir uns mal genauer anschauen, was Free und malloc eigentlich

leisten und wie man diese beiden Funktionen selbst implementieren kann.

Dazu schauen wir uns nochmal an, wie die beiden Funktionen aufgebaut sind.

Die Funktion malloc erhält als Argument die Größe des angeforderten Speichers.

Der Rückgabewert ist entweder ein Zeiger auf genau diesen Speicherbereich, der allokiert

wurde, oder eben ein Fehlerwert.

Wenn man diesen Speicher nun wieder freigeben möchte, muss man auf dem Zeiger, den man

von malloc bekommen hat, die Free Funktion aufrufen.

Jetzt können wir uns an dieser Grafik einmal verdeutlichen, wie das überhaupt intern aussieht,

wenn man mit malloc und free auf dem heap arbeitet.

Der heap steht dabei für den Speicherbereich, der dem Programm dynamisch zur Laufzeit zur

Verfügung steht.

Der große Block in dieser Skizze steht dabei für den gesamten Speicher, der im heap zur

Verfügung steht.

Der dabei schraffierte Teil ist bereits belegter Speicher, der zum Beispiel durch eine malloc

Operation an den Nutzer rausgegeben wurde.

Und jetzt können wir uns überlegen, welche Informationen muss ein System, das die Operation

malloc und free bereitstellt, speichern, damit es auf Basis des Heaps Speicher verwalten kann.

Zunächst einmal haben wir die grundsätzliche Unterscheidung zwischen dem Bereich, der bereits

belegt ist, und Bereichen, die noch frei sind.

Je nachdem müssen wir uns leicht unterschiedliche Informationen speichern.

Für die freien Blöcke müssen wir uns einmal wegspeichern, an welcher Stelle diese freien

Blöcke liegen und wie groß sie sind. Für belegte Blöcke hingegen reicht es,

wenn wir wissen, wie groß der belegte Block ist, weil der Nutzer, der durch

malloc den Speicher angefordert hat, dann selbst für die Verwaltung des

Speichers zuständig ist und bei der Freigabe des Speichers durch free den

Ort wieder mitteilt. An der Stelle können wir kurz überlegen,

welche Datenstruktur sich dafür eignet, genau diese Information wegzuspeichern.

Im Prinzip kann man da sein gesamtes AOD-Wissen draufschmeißen, um eine

möglichst effiziente Datenschruktur zu bauen, die es schnell ermöglicht, einen

passenden Speicherbereich zu finden, um die Reaktionszeit eines mallocks so

gering wie möglich zu halten. Im Falle von SP reicht es jedoch, wenn

ihr auf eine verkettete Liste zurückgreifen, da sich Diesel einfach

implementieren lässt und für die Zwecke vollkommen ausreichend ist.

Das bedeutet, wenn wir eine Freispeicherverwaltung auf Basis einer

verketteten Liste machen möchten, müssen wir eine Liste erstellen, die nur

nach die freien Speicherblöcke verwaltet. Das bedeutet, ein Listenelement

beinhaltet einmal die Größe der freien Speicherblöcke und deren Position im

Speicher. Jetzt können wir uns einmal vorstellen, wie die Verwendung einer

solchen beschriebenen Freispeicherverwaltung aussieht, wenn wir

dafür zum Beispiel die Listneuementierung aus Aufgabe eins heranziehen.

Typischerweise, sieht die30r Implementierung so aus, dass für jeden

Auffruf vonaftert ein neues malloc aufgerufen wird. Damit Platz für ein

neues Listelement geschaffen werden kann. Wenn wir damit aber eine

Freispeicherverwaltung implementieren wollen, stürzen wir schnell auf das Problem,

dass für ein Insert ein Malloc aufgerufen wird und das Malloc wiederum versucht,

Teil einer Videoserie :
Teil eines Kapitels:
Freispeicherverwaltung

Zugänglich über

Offener Zugang

Dauer

00:05:00 Min

Aufnahmedatum

2020-05-24

Hochgeladen am

2020-05-25 00:16:24

Sprache

de-DE

Einbetten
Wordpress FAU Plugin
iFrame
Teilen