Wozu dient "malloc" (C-Programming)?

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.

Woher ich das weiß:Studium / Ausbildung
BR14Nx 
Fragesteller
 02.07.2018, 22:06

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.

0
Explowox  08.07.2018, 02:41
@BR14Nx

Wenn man z.B. IP-Pakete über eine Netzwerk-Schnittstelle einliest und verarbeitet, da weiß man erst zur Laufzeit wie viel Speicher man benötigt und reserviert sich den dann mit malloc.

1