Wozu dient "malloc" (C-Programming)?
Ich hab soweit verstanden, dass malloc im System beliebig großen Speicher reservieren kann. Doch verstehe ich den Sinn dahinter noch nicht ganz. Ich denke mal mit einem Beispiel kann man das ganz gut erklären warum man malloc UNBEDINGT gebrauchen kann.
1 Antwort
Die Speicherverwaltung in C funktioniert mittels dem Stack und dem Heap. Für jede Methode wird zur Compile-Zeit ausgerechnet wie groß der Speicherbedarf dieser Methode und seiner ganzen lokalen Variablen ist (Dies nennt man den Stackframe einer Methode). Wenn du normale Variablen in einer Methode deklarierst (z.B. int a = 2;) dann wird das auf dem Stack (in dem entsprechenden Stackframe) gespeichert. Ist die Methode vorbei, wird der Stackframe samt allen lokalen Variablen der Methode gelöscht. Möchtest du jedoch ein Array erzeugen, dessen Größe du erst zur Laufzeit weißt, dann kannst du dies nicht im Stack speichern, da zur Compile-Zeit nicht feststeht wie groß das Array schlussendlich sein wird. Dafür verwendest du dann malloc.
int *p;
p = (int*)malloc(10*sizeof(int));
Dies würde dir Speicher für ein Array mit z.B. 10 Integern auf dem Heap reservieren und im Stackframe der Methode lediglich Speicherplatz für einen Pointer reservieren, der auf das erste Element des Arrays im Heap zeigt.
Mit malloc kannst du dir also Speicher auf dem Heap variabel zur Laufzeit allokieren, der unabhängig vom derzeitigen lokalen Zustand deines Programms ist, nicht von allein gelöscht wird und jederzeit abgerufen werden kann.
Okay, erst einmal danke für die ausführliche Erklärung. Vieles davon hab ich selbst schon genauso verstanden wie beschrieben, doch stellt sich mir immernoch die Frage wann man dies mal benötigen sollte. Ein simples Anwendungsbeispiel (muss kein Code sein) wäre nett.