logo

Hvad er Memory Leak? Hvordan kan vi undgå?

En hukommelseslæk opstår, når programmører opretter en hukommelse i en bunke og glemmer at slette den.

Konsekvensen af ​​hukommelseslækagen er, at den reducerer computerens ydeevne ved at reducere mængden af ​​tilgængelig hukommelse. Til sidst, i værste fald, kan for meget af den tilgængelige hukommelse blive allokeret, hele eller en del af systemet eller enheden holder op med at fungere korrekt, applikationen fejler, eller systemet bliver meget langsommere.



Hukommelseslækager er særligt alvorlige problemer for programmer som dæmoner og servere, som per definition aldrig afsluttes.

Eksempel på hukommelseslækage

Nedenstående eksempel viser hukommelseslækagekonceptet.

hvordan man bestemmer skærmstørrelsen

C








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

>

>

Årsager til hukommelseslækager i C

  1. Når dynamisk allokeret hukommelse ikke frigøres ved at kalde fri, fører det til hukommelseslækager. Sørg altid for, at for hver dynamisk hukommelsesallokering, der bruger malloc eller calloc, er der et tilsvarende gratis opkald.
  2. Når sporet af pointere, der refererer til den allokerede hukommelse, går tabt, kan det ske, at hukommelsen ikke frigøres. Hold derfor styr på alle pointer og sørg for, at hukommelsen er frigivet.
  3. Når programmet afsluttes brat, og den tildelte hukommelse ikke frigives, eller hvis en del af koden forhindrer opkaldet af ledighed, kan der ske hukommelseslækager.

Hvordan undgår man hukommelseslækager?

For at undgå hukommelseslækager bør hukommelse, der er allokeret på heapen, altid frigøres, når det ikke længere er nødvendigt.

Eksempel: Program til at frigive hukommelse allokeret i bunke for at undgå hukommelseslækage

Nedenstående program viser, at den hukommelse, der er allokeret i heapen, frigives for at undgå hukommelseslækage.

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

>

>

Eksempel: Program til at kontrollere, om hukommelsen er frigivet eller ej

Nedenstående eksempel viser, hvordan man kontrollerer, om den hukommelse, der er allokeret på heapen, er frigivet eller ej.

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>

>

>

Produktion

Memory Freed>

Konklusion

Som konklusion kan der opstå hukommelseslækager, når vi allokerer hukommelse til bunken, men glemmer at frigive den eller frigøre den. På grund af hukommelseslækager kan vi opleve ydeevneforringelse, og systemet bliver ustabilt. Hukommelseslækager forårsager mere skade for langvarige programmer som servere. For at undgå hukommelseslækager skal vi frigøre dynamisk allokeret hukommelse ved at kalde funktioner som free().