Ich möchte gerne wissen, was der Unterschied zwischen statischer und dynamischer Speicherzuweisung ist.
Könnten Sie dies anhand eines Beispiels erklären?
Es gibt drei Arten der Zuweisung - statisch, automatisch und dynamisch.
Statische Zuweisung bedeutet, dass der Speicher für Ihre Variablen beim Programmstart zugewiesen wird. Die Größe wird bei der Erstellung des Programms festgelegt. Dies gilt für globale Variablen, Variablen mit Dateizuordnung und Variablen, die innerhalb von Funktionen mit dem Zusatz "static" definiert werden.
Die Automatische Speicherzuweisung erfolgt für (nicht statische) Variablen, die innerhalb von Funktionen definiert sind, und wird normalerweise auf dem Stack gespeichert (obwohl der C-Standard nicht vorschreibt, dass ein Stack verwendet wird). Sie müssen keinen zusätzlichen Speicher reservieren, haben aber andererseits auch eine begrenzte Kontrolle über die Lebensdauer dieses Speichers. Z.B.: Automatische Variablen in einer Funktion sind nur so lange vorhanden, bis die Funktion beendet ist.
void func() {
int i; /* `i` only exists during `func` */
}
Dynamische Speicherzuweisung ist ein wenig anders. Sie kontrollieren jetzt die genaue Größe und die Lebensdauer dieser Speicherplätze. Wenn Sie sie nicht freigeben, kommt es zu Speicherlecks, die Ihre Anwendung zum Absturz bringen können, da das System irgendwann keinen Speicher mehr zuweisen kann.
int* func() {
int* mem = malloc(1024);
return mem;
}
int* mem = func(); /* still accessible */
Im oberen Beispiel ist der zugewiesene Speicher noch gültig und zugänglich, auch wenn die Funktion beendet wurde. Wenn Sie mit dem Speicher fertig sind, müssen Sie ihn freigeben:
free(mem);
Statische Speicherzuweisung:
Dynamische Speicherzuweisung:
Statische Speicherzuweisung. Der zugewiesene Speicher befindet sich im Stack.
int a[10];
Dynamische Speicherzuweisung. Der zugewiesene Speicher befindet sich im Heap.
int *a = malloc(sizeof(int) * 10);
und dieser sollte freigegeben werden, da es in C keinen Garbage Collector(GC) gibt.
free(a);