Ein Speicherverlust tritt auf, wenn Programmierer einen Speicher in einem Heap erstellen und vergessen, ihn zu löschen.
Die Folge des Speicherlecks ist, dass die Leistung des Computers dadurch beeinträchtigt wird, dass die Menge des verfügbaren Speichers reduziert wird. Im schlimmsten Fall kann es passieren, dass zu viel des verfügbaren Speichers belegt wird, das System oder Gerät ganz oder teilweise nicht mehr ordnungsgemäß funktioniert, die Anwendung fehlschlägt oder das System erheblich langsamer wird.
Speicherlecks sind ein besonders ernstes Problem für Programme wie Daemons und Server, die per Definition nie beendet werden.
Beispiel für einen Speicherverlust
Das folgende Beispiel zeigt das Speicherleckkonzept.
Typoskript-Pfeilfunktion
C
/* Function with memory leak */> #include> void> f()> {> >int>* ptr = (>int>*)>malloc>(>sizeof>(>int>));> >/* Do some work */> >/* Return without freeing ptr*/> >return>;> }> |
>
>
Ursachen für Speicherlecks in C
- Wenn dynamisch zugewiesener Speicher nicht durch den Aufruf von free freigegeben wird, führt dies zu Speicherlecks. Stellen Sie immer sicher, dass für jede dynamische Speicherzuweisung mit malloc oder calloc ein entsprechender kostenloser Aufruf vorhanden ist.
- Wenn die Spur von Zeigern, die auf den zugewiesenen Speicher verweisen, verloren geht, kann es vorkommen, dass kein Speicher freigegeben wird. Behalten Sie daher den Überblick über alle Zeiger und stellen Sie sicher, dass Speicher freigegeben wird.
- Wenn das Programm abrupt beendet wird und der zugewiesene Speicher nicht freigegeben wird oder wenn ein Teil des Codes den Aufruf von „Free“ verhindert, kann es zu Speicherlecks kommen.
Wie vermeide ich Speicherlecks?
Um Speicherlecks zu vermeiden, sollte der auf dem Heap zugewiesene Speicher immer dann freigegeben werden, wenn er nicht mehr benötigt wird.
Beispiel: Programm zur Freigabe des im Heap zugewiesenen Speichers, um Speicherverluste zu vermeiden
Das folgende Programm zeigt, dass der im Heap zugewiesene Speicher freigegeben wird, um Speicherverluste zu vermeiden.
C
/* Function without memory leak */> #include> void> f()> {> >int>* ptr = (>int>*)>malloc>(>sizeof>(>int>));> >/* Do some work */> >/* Memory allocated by malloc is released */> >free>(ptr);> >return>;> }> |
>
>
Beispiel: Programm zur Überprüfung, ob der Speicher freigegeben ist oder nicht
Das folgende Beispiel zeigt, wie überprüft wird, ob der auf dem Heap zugewiesene Speicher freigegeben ist oder nicht.
C
// C Program to check whether the memory is> // freed or not> #include> #include> int> main(>void>)> {> >int>* ptr;> >ptr = (>int>*)>malloc>(>sizeof>(>int>));> >if> (ptr == NULL)> >printf>(>'Memory Is Insuffficient
'>);> >else> {> >free>(ptr);> >printf>(>'Memory Freed
'>);> >}> }> // This code is contributed by sarajadhav12052009> |
>
>Ausgabe
Memory Freed>
Abschluss
Zusammenfassend lässt sich sagen, dass Speicherlecks auftreten können, wenn wir Speicher auf dem Heap zuweisen, aber vergessen, ihn freizugeben oder freizugeben. Aufgrund von Speicherlecks kann es zu Leistungseinbußen kommen und das System wird instabil. Speicherlecks verursachen bei lang laufenden Programmen wie Servern größeren Schaden. Um Speicherlecks zu vermeiden, müssen wir dynamisch zugewiesenen Speicher freigeben, indem wir Funktionen wie free() aufrufen.