logo

Ce este pierderea memoriei? Cum putem evita?

O scurgere de memorie are loc atunci când programatorii creează o memorie într-o grămadă și uită să o ștergă.

Consecința scurgerii de memorie este că reduce performanța computerului prin reducerea cantității de memorie disponibilă. În cele din urmă, în cel mai rău caz, prea multă memorie disponibilă poate fi alocată, tot sau o parte din sistemul sau dispozitivul nu mai funcționează corect, aplicația eșuează sau sistemul încetinește enorm.



Scurgerile de memorie sunt probleme deosebit de grave pentru programe precum demonii și serverele care, prin definiție, nu se termină niciodată.

Exemplu de scurgere de memorie

Exemplul de mai jos arată conceptul de scurgere de memorie.

Logica de ordinul 1

C








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

>

>

Cauzele scurgerilor de memorie în C

  1. Când memoria alocată dinamic nu este eliberată prin apelarea gratuită, atunci aceasta duce la pierderi de memorie. Asigurați-vă întotdeauna că pentru fiecare alocare de memorie dinamică folosind malloc sau calloc, există un apel gratuit corespunzător.
  2. Când se pierde traseul pointerilor care se referă la memoria alocată, se poate întâmpla ca memoria să nu fie eliberată. Prin urmare, păstrați evidența tuturor indicatorilor și asigurați-vă că memoria este eliberată.
  3. Când programul se termină brusc și memoria alocată nu este eliberată sau dacă vreo parte a codului împiedică apelul liber, atunci se pot produce scurgeri de memorie.

Cum să evitați scurgerile de memorie?

Pentru a evita scurgerile de memorie, memoria alocată pe heap ar trebui să fie întotdeauna eliberată atunci când nu mai este necesară.

Exemplu: Program pentru eliberarea memoriei alocate în heap pentru a evita scurgerea memoriei

Programul de mai jos arată că memoria alocată în heap este eliberată pentru a evita scurgerea memoriei.

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

>

>

Exemplu: Program pentru a verifica dacă memoria este eliberată sau nu

Exemplul de mai jos demonstrează cum se verifică dacă memoria alocată pe heap este eliberată sau nu.

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>

>

>

Ieșire

Memory Freed>

Concluzie

În concluzie, scurgerile de memorie pot apărea atunci când alocăm memorie pe heap, dar uităm să o eliberăm sau să o eliberăm. Din cauza scurgerilor de memorie, este posibil să ne confruntăm cu o degradare a performanței și sistemul devine instabil. Scurgerile de memorie cauzează mai multe daune pentru programele de lungă durată, cum ar fi serverele. Pentru a evita scurgerile de memorie, trebuie să eliberăm memoria alocată dinamic apelând funcții precum free().