Čo je to zbierka odpadu C ++?

Zber odpadu je technika správy pamäte. Je to samostatná metóda automatickej správy pamäte, ktorá sa používa v programovacích jazykoch, kde nie je preferovaná alebo vykonávaná manuálna správa pamäte. Pri manuálnej metóde správy pamäte sa od užívateľa vyžaduje, aby spomínal použitú pamäť, ktorú je možné uvoľniť, zatiaľ čo zberač odpadu zhromažďuje pamäť, ktorá je obsadená premennými alebo objektmi, ktoré sa už v programe už nepoužívajú. Zberatelia odpadu budú spravovať iba pamäť, ďalšie zdroje, ako sú deštruktory, okno interakcie používateľa alebo súbory, nebude spracovávať zberateľ odpadu.

Len málo jazykov potrebuje zberače odpadkov ako súčasť jazyka, aby boli efektívne. Tieto jazyky sa nazývajú jazyky na odvoz odpadu. Napríklad Java, C # a väčšina skriptovacích jazykov potrebuje ako súčasť svojej funkcie zbieranie odpadu. Zatiaľ čo jazyky ako C a C ++ podporujú manuálnu správu pamäte, ktorá funguje podobne ako zberač odpadu. Existuje len málo jazykov, ktoré podporujú zber odpadu aj manuálne spravovanú alokáciu / deallokáciu pamäte, a v takom prípade bude pre zberač odpadu a manuálnu pamäť vyhradená samostatná hromada pamäte.

Niektoré z týchto chýb je možné zabrániť, keď sa použije spôsob zberu odpadu. Napríklad:

  • problém s hojdajúcim sa ukazovateľom, v ktorom je už namierená pamäť už pridelená, zatiaľ čo ukazovateľ stále zostáva a ukazuje na rôzne priradené údaje alebo už vymazanú pamäť
  • problém, ktorý sa vyskytne, keď sa pokúsime vymazať alebo prerozdeliť pamäť druhýkrát, ktorá už bola vymazaná alebo prerozdelená na iný objekt
  • odstraňuje problémy alebo chyby spojené s dátovými štruktúrami a efektívne spravuje pamäť a údaje
  • nedochádza k únikom pamäte ani k vyčerpaniu pamäte

Pozrime sa na podrobné pochopenie manuálnej správy pamäte vs. zberu odpadu, výhod, nevýhod a spôsobu implementácie v jazyku C ++.

Manuálna správa pamäte

Ak prestaneme používať túto pamäť, je potrebné uvoľniť dynamicky pridelenú pamäť počas doby vykonávania haldy. Dynamicky pridelená pamäť berie pamäť z haldy, ktorá je voľným úložiskom pamäte.

V C ++ sa táto alokácia a deallokácia pamäte vykonáva manuálne pomocou príkazov ako nové, vymazať. Použitie 'novej' pamäte je pridelené z haldy. Po použití musí byť táto pamäť vymazaná pomocou príkazu 'vymazať'.

Každé pridelenie pamäte pomocou „nového“ musí byť ukončené príkazom „vymazať“. Ak nie, stratíme pamäť.

Aby sme to jasne ukázali na príklade:

n = nový sample_object;
Tu sa implementuje použitie ******* *******
zmazať n;

Ako je zobrazené, každý nový by mal skončiť alebo sklon príkazom na vymazanie. Tu je ukazovateľovi pridelená pamäť pomocou príkazu „nový“ a odkazuje sa na ňu alebo odkazuje na objekt nazvaný „sample_object“. Po dokončení používania a fungovania ukazovateľa by sme mali uvoľniť alebo uvoľniť pamäť pomocou príkazu „odstrániť“, ako je uvedené vyššie.

Ale v prípade zberu odpadu sa pamäť prideľuje pomocou príkazu „nový“, ale nie je potrebné ju manuálne uvoľňovať pomocou príkazu „vymazať“. V takýchto prípadoch zberač odpadu spustí periodicky kontrolu voľnej pamäte. Ak časť pamäte nie je namierená na žiadny objekt, vyčistí alebo uvoľní pamäť, čím vytvorí viac voľného haldy.

Výhody a nevýhody manuálnej správy pamäte

Výhody manuálnej správy pamäte spočívajú v tom, že užívateľ by mal úplnú kontrolu nad operáciami prideľovania a prideľovania a tiež vedel, kedy je alokovaná nová pamäť a kedy je uvoľnená alebo uvoľnená. Ale v prípade zberu odpadu, v presne rovnakom prípade po použití nebude pamäť uvoľnená, bude uvoľnená, keď sa s ňou stretne počas periodickej operácie.

Aj v prípade manuálnej správy pamäte sa deštruktor zavolá v rovnakom okamihu, keď zavoláme príkaz 'vymazať'. Ale v prípade zberača odpadu, ktorý nie je implementovaný.

S použitím manuálnej správy pamäte súvisí niekoľko problémov. Niekedy by sme mali tendenciu dvojnásobne vymazať obsadenú pamäť. Keď odstránime už vymazaný ukazovateľ alebo pamäť, existuje šanca, že ukazovateľ môže odkazovať na niektoré ďalšie údaje a môže sa používať.

Ďalším problémom, ktorý máme v manuálnej správe pamäte, je to, že ak dostaneme výnimku počas vykonávania alebo používania nového ukazovateľa prideleného pamäte, vyjde zo sekvencie „nových“ a „vymazať“ a operácia uvoľnenia nebude. vykonané. Môžu sa vyskytnúť aj problémy s únikom pamäte.

Výhody a nevýhody zberača odpadu

Jednou z hlavných nevýhod zberu odpadu je čas alebo cykly CPU potrebné na nájdenie nevyužitej pamäte a jej vymazanie, aj keď používateľ vie, ktorá pamäť ukazovateľa môže byť uvoľnená a nepoužíva sa. Ďalšou nevýhodou je, že nebudeme vedieť, kedy bude odstránená, ani kedy bude volaný deštruktor.

Algoritmus zberu odpadu

Existuje veľa algoritmov na zber odpadu, ako je napríklad počítanie odkazov, označovanie a zametanie, kopírovanie atď. Pozrime sa na podrobnejšie pochopenie jedného algoritmu. Napríklad, keď vidíme algoritmus počítania referencií, každá dynamická pamäť bude mať počet referencií. Po vytvorení referencie sa počet referencií zvýši a kedykoľvek sa referencia vymaže, počet referencií sa zníži. Akonáhle je referenčný počet nulový, znamená to, že pamäť je nevyužitá a môže byť uvoľnená.

Tento algoritmus sa môže implementovať v C ++ pomocou špecifického typu ukazovateľa. Mal by sa uviesť konkrétny typ ukazovateľa, ktorý sa môže použiť na účely sledovania všetkých vytvorených odkazov, sledovania počtu odkazov pri vytvorení a vymazaní odkazu. Program C ++ môže obsahovať ako manuálnu správu pamäte, tak aj zber odpadu v rovnakom programe. Podľa potreby je možné použiť buď normálny ukazovateľ, alebo ukazovateľ špecifického zberača odpadu.

Aby sme to zhrnuli, zber odpadu je metóda opačná ako manuálna správa pamäte. V zberači odpadkov sa pamäť uvoľňuje automaticky na základe pravidelných časových intervalov alebo na základe špecifických kritérií, ktoré oznamujú, či sa už nepoužívajú. Obe metódy majú svoje výhody a nevýhody. Toto sa môže implementovať a používať podľa zložitosti funkcie v závislosti od použitého jazyka a jeho rozsahu.

Odporúčané články

Toto je sprievodca zbierkou odpadu C ++. Tu diskutujeme o manuálnej správe pamäte a algoritme zberu odpadu spolu s výhodami a nevýhodami. Viac informácií nájdete aj v ďalších navrhovaných článkoch -

  1. Konštruktor a Destructor v Jave
  2. Funkcie reťazca C ++
  3. Destruktor v Jave
  4. Aplikácie C ++ v reálnom svete
  5. Prvých 11 funkcií a výhod C ++

Kategórie: