C Grundkurs

Speicher reservieren und freigeben

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Sie lernen in dem Video Funktionen kennen, um Speicher zu reservieren (mit malloc() und calloc()) und wieder freizugeben (mit free()).
05:29

Transkript

In vielen C-Programmen gibt es Strukturen, die zum Zeitpunkt der Übersetzung des Programms, also der Kompilierung, in der Größe noch nicht bekannt sind. Das können Arrays sein, das können aber auch andere Strukturen sein, die zum Zeitpunkt X während eines Programmlaufs wachsen, oder sich auch verkleinern können. Es ist nun nicht sonderlich effizient, den Speicherbedarf für diese Strukturen hart kodiert im Programm vorzugeben. Mit einer maximalen Größe, beispielsweise. Wenn Sie z.B. erwarten, Sie haben ein Array, das vielleicht zwei Werte, zwei Elemente aufnimmt, aber möglicherweise auch 1.000, na dann reservieren Sie einfach einmal 1.000 Pro Forma. Das ist vollkommen ineffizient. Denn was ist für den Fall, dass es eben nur zwei Elemente sind, die dann wirklich zum Programmlauf benötigt werden. Man wird für solche Situationen versuchen, dynamisch den Speicher zu verwalten und dynamisch sich den Speicher zu holen, den man zu einem Zeitpunkt X benötigt. Es gibt dazu in C zwei Funktionen. Dieses MALLOC und CALLOC. M steht für Memory Allocation, die sich beide in der Bibliothek StandardLib (stdLib) befinden. Wenn man Speicher zur Laufzeit selbst dynamisch allozieren kann, dann kann man ein Programm damit auch abschließen. Stellen Sie sich eine Endlos-Schleife vor, die ständig nur Speicher alloziert. Man sollte tunlichst Speicher, den man irgendwann einmal reserviert hat auch wieder frei geben. Das geht relativ einfach, indem man die Funktion FREE aufruft. Wir schauen uns also in diesem Video jetzt die Verwendung dieser beiden Funktionen zum Allozieren von Speicher, also auch der Freigabe vom Speicher an. Wobei Sie hier sehen, dass die Freigabe vom Speicher über FREE sehr einfach ist. Gefährlich ist es nur, wenn man es vergisst. Sie haben hier einen Pointer, einen Zeiger auf irgend einer Struktur beispielsweise ein Array. Und dieser Pointer wird als Parameter für die Funktion FREE genommen, um Speicher wieder freizugeben. Um Speicher zu reservieren, nimmt man die Funktion Memory Allocation, oder so ähnlich, also MALLOC und übergibt einen nummerischen Parameter für die Anzahl an Byte, die man hier reservieren möchte. Da ich hier einen Zeiger habe, der auf eine Struktur mit INT-Datentypen verweist, also ein INT-Array, dann nehme ich ein Vielfaches des Datentyps INT und reserviere mir dafür den Speicher. Nun gibt es hier noch eine Konstruktion, die wir im Grunde auch weg lassen können. Das heißt, ich habe hier ein CAST stehen, eine Typumwandlung. Die Funktion MALLOC liefert einen VOID-Zeiger zurück. Und ich habe hier eine Struktur, für die ich Speicher haben möchte - den Datentyp INTAT. Damit zusammenpasst, caste ich den Rückgabewert von MALLOC auf einen passenden Typ hier. Das ist nicht notwendig. C-Programme sind auch so gebaut, dass dieser Zeiger automatisch in den richtigen Typ bei MALLOC konvertiert wird. Aber es ist sauberer. Man kann hier auch deutlich sehen, für was für eien Typ von Struktur man den Speicher reserviert. Die Funktion CALLOC, das steht für Cleared Memory Allocation, reserviert genau so Speicher. Allerdings nicht nach Byte. Das heißt, diese Parameter sind nicht nach Byte aufgebaut - außerdem haben wir hier 2 Parameter - sondern nach Elementen. Der erste Parameter bestimmt die Anzahl der Elemente und der zweite die Größe eines jeden Elementes. Ich habe das jetzt hier so gewählt, dass die Speicherallozierung von beiden Funktionen identisch ist. Dieses Cleared Memory Allocation macht noch etwas, was das MALLOC nicht macht. Cleared sagt es schon aus. Die Speicherstellen werden mit 0 initialisiert. MALLOC macht das nicht. Nach Aufruf der beiden Funktionen habe ich also jetzt sicher den Speicher zur Verfügung, den ich auch brauche, um hier jetzt z.B. ein Array zuzuweisen, mit einer Anzahl von 10 Elementen vom Typ INT. Ich gerate nicht in die Gefahr, dass ich Randbereiche überschreibe, die von anderen wichtigen Informationen bereits belegt sind. Und wie schon mehrfach erwähnt, sollte man, sobald man dann mit dieser Struktur fertig ist, den Speicherbereich leeren, der für diese Struktur reserviert wurde. Das macht man mit dieser FREE Funktion. Sie haben also in diesem Video zwei Funktionen zum Reservieren von Speicher und eine zum Freigeben von Speicher kennengelernt, um darüber eine dynamische Speicherverwaltung in C durchführen zu können.

C Grundkurs

Lernen Sie das Syntaxkonzept von C von Grund auf kennen vor und sehen Sie, wie mit einer geeigneten Entwicklungsumgebung Programme Schritt für Schritt entstehen.

4 Std. 36 min (70 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!