logo

Wat is geheugenlek? Hoe kunnen we vermijden?

Een geheugenlek treedt op wanneer programmeurs een geheugen in een heap creëren en vergeten dit te verwijderen.

Het gevolg van het geheugenlek is dat het de prestaties van de computer vermindert door de hoeveelheid beschikbaar geheugen te verminderen. Uiteindelijk kan in het ergste geval te veel van het beschikbare geheugen worden toegewezen, werkt het systeem of apparaat geheel of gedeeltelijk niet meer correct, mislukt de toepassing of wordt het systeem enorm langzamer.



Geheugenlekken zijn bijzonder ernstige problemen voor programma's als daemons en servers, die per definitie nooit worden beëindigd.

Voorbeeld van geheugenlek

Het onderstaande voorbeeld toont het geheugenlekconcept.

directory in Linux-opdrachten

C








/* Function with memory leak */> #include> void> f()> {> >int>* ptr = (>int>*)>malloc>(>sizeof>(>int>));> >/* Do some work */> >/* Return without freeing ptr*/> >return>;> }>

>

>

Oorzaken van geheugenlekken in C

  1. Wanneer dynamisch toegewezen geheugen niet wordt vrijgemaakt door gratis te bellen, leidt dit tot geheugenlekken. Zorg er altijd voor dat voor elke dynamische geheugentoewijzing met behulp van malloc of calloc er een overeenkomstige gratis oproep is.
  2. Wanneer het spoor van verwijzingen naar het toegewezen geheugen verloren gaat, kan het gebeuren dat het geheugen niet wordt vrijgemaakt. Houd daarom alle aanwijzingen bij en zorg ervoor dat het geheugen wordt vrijgemaakt.
  3. Wanneer het programma abrupt wordt beëindigd en het toegewezen geheugen niet wordt vrijgemaakt, of als een deel van de code de aanroep van vrij verhindert, kunnen er geheugenlekken optreden.

Hoe geheugenlekken voorkomen?

Om geheugenlekken te voorkomen, moet geheugen dat op de heap is toegewezen altijd worden vrijgegeven wanneer het niet langer nodig is.

Voorbeeld: Programma om geheugen vrij te geven dat in Heap is toegewezen om geheugenlekken te voorkomen

Het onderstaande programma laat zien dat het toegewezen geheugen in de heap wordt vrijgegeven om geheugenlekken te voorkomen.

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>;> }>

>

>

Voorbeeld: Programma om te controleren of het geheugen vrij is of niet

Het onderstaande voorbeeld laat zien hoe u kunt controleren of het toegewezen geheugen op de heap vrij is of niet.

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>

>

>

Uitvoer

Memory Freed>

Conclusie

Kortom, geheugenlekken kunnen optreden wanneer we geheugen op de heap toewijzen, maar vergeten het vrij te geven of vrij te maken. Als gevolg van geheugenlekken kunnen we prestatieverslechtering ervaren en wordt het systeem instabiel. Geheugenlekken veroorzaken meer schade aan langlopende programma's zoals servers. Om geheugenlekken te voorkomen moeten we dynamisch toegewezen geheugen vrijmaken door functies als free() aan te roepen.