Hvad er C ++ affaldsopsamling?

Affaldsopsamling er en hukommelsestyringsteknik. Det er en separat automatisk hukommelsesadministrationsmetode, der bruges i programmeringssprog, hvor manuel hukommelsesstyring ikke foretrækkes eller udføres. I den manuelle hukommelseshåndteringsmetode kræves det, at brugeren nævner den hukommelse, der er i brug, og som kan omplaceres, medens affaldsopsamleren opsamler hukommelsen, der er besat af variabler eller objekter, der ikke mere er i brug i programmet. Kun hukommelse styres af affaldsopsamlere, andre ressourcer såsom destruktører, brugerinteraktionsvindue eller filer vil ikke blive håndteret af affaldssamleren.

Få sprog har brug for affaldsopsamlere som en del af sproget for god effektivitet. Disse sprog kaldes sprogindsamlede sprog. For eksempel har Java, C # og de fleste script-sprog brug for affaldsopsamling som en del af deres funktion. Mens sprog som C og C ++ understøtter manuel styring af hukommelsen, der fungerer som affaldsopsamleren. Der er få sprog, der understøtter både affaldsindsamling og manuelt administreret hukommelsestildeling / fordeling, og i sådanne tilfælde vil en separat hukommelse blive tildelt affaldssamleren og den manuelle hukommelse.

Nogle af fejlene kan forhindres, når affaldsindsamlingsmetoden bruges. Såsom:

  • dinglende markørproblem, hvor den pegede hukommelse allerede er omdelt, mens markøren stadig forbliver og peger på forskellige tildelte data eller allerede slettet hukommelse
  • problemet, der opstår, når vi forsøger at slette eller omfordele en hukommelse anden gang, som allerede er blevet slettet eller omfordelt til et andet objekt
  • fjerner problemer eller fejl, der er forbundet med datastrukturer og udfører hukommelsen og datahåndteringen effektivt
  • hukommelses lækager eller hukommelse udmattelse problem kan undgås

Lad os se en detaljeret forståelse af manuel styring af hukommelse vs indsamling af affald, fordele, ulemper og hvordan det implementeres i C ++.

Manuel hukommelseshåndtering

Dynamisk allokeret hukommelse i løbetid fra bunken skal frigives, når vi holder op med at bruge den hukommelse. Dynamisk allokeret hukommelse tager hukommelse fra bunken, som er en gratis hukommelseslager.

I C ++ udføres denne hukommelsesallokering og deallokation manuelt ved hjælp af kommandoer som nye, slet. Brug af 'ny' hukommelse tildeles fra dyngen. Efter dens brug skal denne hukommelse ryddes ved hjælp af kommandoen 'slet'.

Hver hukommelsesallokering med 'ny' skal afsluttes med en 'slet'-kommando. Hvis ikke går vi ud af hukommelsen.

For at vise det tydeligt med et eksempel:

n = nyt eksempel_objekt;
******* brug implementeres her *******
slette n;

Som vist skal hver ny slutte eller hælde med en sletekommando. Her tildeles n markøren hukommelse ved hjælp af 'ny' kommando og henvises eller peges til et objekt kaldet 'sample_object'. Når brugen og funktionen af ​​markøren er afsluttet, skal vi frigive eller frigøre hukommelsen ved hjælp af 'slet' -kommandoen som gjort ovenfor.

Men i tilfælde af affaldsopsamling tildeles hukommelsen ved hjælp af 'ny' kommando, men den behøver ikke frigives manuelt ved hjælp af 'slet'. I sådanne tilfælde kører affaldsopsamleren regelmæssigt efter fri hukommelse. Når et hukommelsesstykke ikke peges af noget objekt, ryddes det eller frigøres hukommelsen og skaber mere ledig bunkeplads.

Fordele og ulemper ved manuel hukommelsesstyring

Fordelene ved manuel hukommelsestyring er, at brugeren har fuld kontrol over både allokering og omfordeling af operationer og også ved, hvornår en ny hukommelse er allokeret, og hvornår den er omfordelt eller frigivet. Men i tilfælde af affaldsopsamling, i nøjagtigt samme tilfælde efter brugen, vil hukommelsen ikke blive frigivet, frigives den, når den støder på den under den periodiske operation.

Også i tilfælde af manuel hukommelsesstyring kaldes destruktoren på det samme øjeblik, når vi kalder 'slet' -kommandoen. Men i tilfælde af affaldsopsamler, der ikke er implementeret.

Der er et par problemer forbundet med brug af manuel hukommelsesstyring. Nogle gange har vi en tendens til at dobbelt slette den besatte hukommelse. Når vi sletter den allerede slettede markør eller hukommelse, er der chancer for, at markøren henviser til nogle andre data og kan være i brug.

Et andet problem, som vi har inden for manuel styring af hukommelse, er, hvis vi får en undtagelse under udførelsen eller brugen af ​​den nye hukommelse, der er tildelt markøren, vil den gå ud af sekvensen for 'ny' og 'slette', og frigivelsesfunktionen vil ikke være udført. Der kan også være problemer med hukommelseslækage.

Fordele og ulemper ved affaldsopsamler

En stor ulempe ved indsamling af affald er den involverede tid eller CPU-cyklusser, der er involveret for at finde den ubrugte hukommelse og slette den, selvom brugeren ved, hvilken pointerhukommelse der kan frigives og ikke er i brug. En anden ulempe er, at vi ikke vil vide, hvornår det slettes, eller hvornår destruktoren kaldes.

Affaldsopsamlingsalgoritme

Der er mange affaldsopsamlingsalgoritmer såsom referencetælling, markering og fejning, kopiering osv. Lad os se en algoritme i detaljer for bedre forståelse. Når vi for eksempel ser referencetællingsalgoritmen, har hver dynamisk hukommelse et referencetælling. Når der oprettes en reference, øges referencetallet, og hver gang en reference slettes, henvises referencetallet. Når referenceantalet er nul, vises det, at hukommelsen er ubrugt og kan frigives.

Denne algoritme kan implementeres i C ++ ved hjælp af en bestemt pointertype. En bestemt pointertype skal deklareres, og dette kan bruges til formål såsom at holde styr på alle oprettede referencer, holde styr på referencetallet, når referencen oprettes og slettes. Et C ++ -program kan indeholde både manuel hukommelsesstyring og indsamling af affald, der sker i det samme program. Efter behov kan enten den normale markør eller den specifikke affaldsopsamlingsmarkør bruges.

For at opsummere er affaldsopsamling således en modsat metode til manuel styring af hukommelse. I en affaldsopsamler frigives hukommelsen automatisk baseret på periodisk tidsbasis eller baseret på specifikke kriterier, der fortæller, om den ikke er mere i brug. Begge metoder har deres egne fordele og ulemper. Dette kan implementeres og bruges i henhold til kompleksiteten af ​​funktionen, afhængigt af det anvendte sprog og dets omfang.

Anbefalede artikler

Dette er en guide til C ++ Garbage Collection. Her diskuterer vi manuel hukommelsesstyring og affaldsopsamlingsalgoritmen sammen med fordele og ulemper. Du kan også gennemgå vores andre foreslåede artikler for at lære mere -

  1. Konstruktør og Destructor i Java
  2. C ++ strengfunktioner
  3. Destructor i Java
  4. Anvendelser af C ++ i Real World
  5. Top 11 funktioner og fordele ved C ++

Kategori: