logo

Mikä on muistivuoto? Kuinka voimme välttää?

Muistivuoto tapahtuu, kun ohjelmoijat luovat muistin kasaan ja unohtavat poistaa sen.

Muistivuodon seurauksena se heikentää tietokoneen suorituskykyä vähentämällä käytettävissä olevan muistin määrää. Lopulta, pahimmassa tapauksessa, liian paljon käytettävissä olevaa muistia voi varata, koko järjestelmä tai laite tai osa siitä lakkaa toimimasta oikein, sovellus epäonnistuu tai järjestelmä hidastuu huomattavasti.



Muistivuodot ovat erityisen vakavia ongelmia ohjelmille, kuten demoneille ja palvelimille, jotka määritelmän mukaan eivät koskaan pääty.

Esimerkki muistivuotojsta

Alla oleva esimerkki näyttää muistivuotokonseptin.

palindromi javassa

C








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

>

>

C:n muistivuotojen syyt

  1. Kun dynaamisesti varattu muisti ei vapaudu kutsumalla free, se johtaa muistivuotojin. Varmista aina, että jokaista dynaamista muistin varausta varten mallocilla tai callocilla on vastaava ilmainen puhelu.
  2. Kun osoittimien jäljitys, jotka viittaavat varattuun muistiin, katoaa, voi tapahtua, että muisti ei vapaudu. Pidä siis kirjaa kaikista osoittimista ja varmista, että muisti vapautetaan.
  3. Kun ohjelma päättyy äkillisesti ja varattu muisti ei vapaudu tai jos jokin koodin osa estää vapaan kutsumisen, voi tapahtua muistivuotoja.

Kuinka välttää muistivuotoja?

Muistivuotojen välttämiseksi kasaan varattu muisti tulee aina vapauttaa, kun sitä ei enää tarvita.

Esimerkki: Ohjelma vapauttaa kasaan varatun muistin muistivuodon välttämiseksi

Alla oleva ohjelma näyttää, että kasaan varattu muisti vapautetaan muistivuodon välttämiseksi.

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

>

>

Esimerkki: Ohjelma tarkistaa, onko muisti vapautettu vai ei

Alla oleva esimerkki näyttää kuinka tarkistaa, onko kasaan varattu muisti vapautettu vai ei.

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>

>

>

Lähtö

Memory Freed>

Johtopäätös

Yhteenvetona voidaan todeta, että muistivuotoja voi tapahtua, kun varaamme muistia kasaan, mutta unohdamme vapauttaa sen tai vapauttaa sen. Muistivuotojen vuoksi saatamme kokea suorituskyvyn heikkenemistä ja järjestelmästä tulee epävakaa. Muistivuodot aiheuttavat enemmän vahinkoa pitkään käynnissä oleville ohjelmille, kuten palvelimille. Muistivuotojen välttämiseksi meidän on vapautettava dynaamisesti varattu muisti kutsumalla toimintoja, kuten free().