Vad är C ++ Garbage Collection?

Garbage collection är en minneshanteringsteknik. Det är en separat automatisk minneshanteringsmetod som används i programmeringsspråk där manuell minneshantering inte föredras eller görs. I den manuella minneshanteringsmetoden krävs att användaren nämner det minne som används och som kan omlokaliseras, medan sopor samlaren samlar in minnet som är upptaget av variabler eller objekt som inte längre används i programmet. Endast minne hanteras av sopor, andra resurser som destruktorer, interaktionsfönster för användare eller filer kommer inte att hanteras av avfallssamlaren.

Få språk behöver sopor som en del av språket för god effektivitet. Dessa språk kallas som skräpsamlade språk. Java, C # och de flesta skriptspråk behöver till exempel skräppassning som en del av deras funktion. Medan språk som C och C ++ stöder manuell minnehantering som fungerar likadant som sopor. Det finns få språk som stöder både skräppassning och manuellt hanterad minnesallokering / -fördelning och i sådana fall tilldelas en separat mängd minne till soporuppsamlaren och manuellt minne.

Vissa av buggarna kan förhindras när metoden för avfallshantering används. Till exempel:

  • dinglande pekarproblem där det pekade minnet redan är omlokaliserat medan pekaren fortfarande kvarstår och pekar på olika tilldelade data eller redan raderat minne
  • problemet som uppstår när vi försöker ta bort eller omlokalisera ett minne andra gången som redan har raderats eller omfördelats till något annat objekt
  • tar bort problem eller buggar associerade med datastrukturer och gör minnet och datahanteringen effektivt
  • minnesläckor eller problem med minnesutmattning kan undvikas

Låt oss se en detaljerad förståelse av manuell minnehantering vs soporavfall, fördelar, nackdelar och hur det implementeras i C ++.

Manuell minnehantering

Dynamiskt tilldelat minne under körningstid från högen måste släppas när vi slutar använda det minnet. Dynamiskt allokerat minne tar minne från högen, som är en gratis lagring av minne.

I C ++ görs denna minnesallokering och omlokalisering manuellt med hjälp av kommandon som nya, radera. Att använda "nytt" minne tilldelas från högen. Efter dess användning måste detta minne rensas med kommandot 'radera'.

Varje minnesallokering med 'nytt' måste avslutas med ett 'radera' -kommando. Om inte kommer vi att gå ur minnet.

För att visa det tydligt med ett exempel:

n = nytt exempel_objekt;
*******-användning implementeras här *******
radera n;

Som visas bör varje nytt sluta eller luta med ett borttagningskommando. Här tilldelas n-pekaren minne med 'nytt' kommando och refereras till eller pekas till ett objekt som heter 'sample_object'. När pekaren har använts och fungerat bör vi släppa eller frigöra minnet med kommandot 'ta bort' som gjort ovan.

Men i händelse av skräppassning tilldelas minnet med 'nytt' kommando men det behöver inte släppas manuellt med 'radera'. I sådana fall kör soporuppsamlaren regelbundet efter fritt minne. När ett minne inte pekas av något objekt rensar eller släpper det minnet och skapar mer ledigt högutrymme.

Fördelar och nackdelar med manuell minnehantering

Fördelarna med manuell minnehantering är att användaren skulle ha fullständig kontroll över både allokerings- och omlokaliseringsoperationer och också vet när ett nytt minne tilldelas och när det är omlokaliserat eller släppt. Men när det gäller insamling av skräp, kommer exakt samma instans efter användning minnet inte att släppas, det kommer att släppas när det möter det under den periodiska operationen.

Även i fallet med manuell minneshantering kommer destruktorn att ringas i samma ögonblick när vi kallar 'radera' -kommandot. Men i fallet med sopor som inte implementeras.

Det finns några problem relaterade till att använda manuell minneshantering. Ibland kan vi ha en tendens att dubbelt ta bort det besatta minnet. När vi tar bort den redan raderade pekaren eller minnet finns det chansen att pekaren refererar till annan information och kan vara i användning.

Ett annat problem som vi har i manuell minneshantering är, om vi får ett undantag under körningen eller användningen av den nya minnestilldelade pekaren, kommer den att gå ur sekvensen för "ny" och "radera" och släppningsfunktionen kommer inte att vara genomförde. Det kan också vara problem med minnesläckage.

Fördelar och nackdelar med Garbage Collector

En stor nackdel med skräpuppsamlingen är den involverade tiden eller CPU-cyklerna som är involverade för att hitta det oanvända minnet och ta bort det, även om användaren vet vilket pekarminne som kan släppas och inte användas. En annan nackdel är att vi inte vet tidpunkten när den raderas eller när förstöraren kallas.

Avfallssamlingsalgoritm

Det finns många skräpsamlingsalgoritmer som referensräkning, märkning och svep, kopiering, etc. Låt oss se en algoritm i detalj för bättre förståelse. När vi till exempel ser referensräknarealgoritmen kommer varje dynamiskt minne att ha ett referensantal. När en referens skapas kommer referensräkningen att öka och varje gång en referens tas bort minskas referensräkningen. När referensantalet blir noll visar det att minnet är oanvändt och kan släppas.

Denna algoritm kan implementeras i C ++ med en specifik pekartyp. En specifik pekartyp bör deklareras och den kan användas för syften som att hålla reda på alla skapade referenser, hålla reda på referensräkningen när referens skapas och raderas. Ett C ++ -program kan innehålla både manuell minnehantering och skräppassning som händer i samma program. Enligt behovet kan antingen den normala pekaren eller den specifika skräpfångare-pekaren användas.

För att sammanfatta är soporavfall en metod motsatt till manuell minnehantering. I en soporuppsamlare släpps minnet automatiskt baserat på periodisk tid eller baserat på specifika kriterier som säger om det inte är mer i användning. Båda metoderna har sina egna fördelar och nackdelar. Detta kan implementeras och användas beroende på funktionens komplexitet, beroende på vilket språk som används och dess omfattning.

Rekommenderade artiklar

Detta är en guide till C ++ Garbage Collection. Här diskuterar vi manuell minnehantering och skräppassningsalgoritmen tillsammans med fördelar och nackdelar. Du kan också gå igenom våra andra föreslagna artiklar för att lära dig mer -

  1. Konstruktör och Destructor i Java
  2. C ++ strängfunktioner
  3. Destructor i Java
  4. Applikationer av C ++ I Real World
  5. Topp 11 funktioner och fördelar med C ++

Kategori: