Mi a C ++ szemetes gyűjtés?

A szemétszedés memóriakezelési technika. Ez egy különálló automatikus memóriakezelési módszer, amelyet olyan programozási nyelveken használnak, ahol a kézi memóriakezelés nem részesül előnyben vagy nem történik meg. A kézi memóriakezelési módszerben a felhasználónak meg kell említenie a használt memóriát, amely elosztható, míg a szemetesgyűjtő olyan memóriát gyűjt, amelyet olyan változók vagy tárgyak foglalnak el, amelyeket a programban már nem használnak. Csak a memóriát fogják kezelni a szemetesgyűjtők, más erőforrásokat, mint például a pusztítókat, a felhasználói interakciós ablakot vagy a fájlokat a szemetesgyűjtő nem kezeli.

A jó hatékonyság érdekében kevés nyelvre van szükség a hulladékgyűjtőkre a nyelv részeként. Ezeket a nyelveket szemétgyűjtő nyelveknek nevezik. Például a Java, a C # és a legtöbb szkriptnyelv működésének részeként szemetet kell gyűjteni. Míg a C és a C ++ nyelvek támogatják a kézi memóriakezelést, amely hasonlóan működik, mint a szemétszedő. Kevés olyan nyelv támogatja a szemetek gyűjtését és a kézilag kezelt memóriaelosztást / -allokációt, és ilyen esetekben külön-külön memória-halom lesz a hulladékgyűjtő és a kézi memória számára.

Néhány hibát a hulladékgyűjtési módszer használatakor el lehet kerülni. Úgymint:

  • lógó mutatóprobléma, amelyben a mutatott memória már el van osztva, míg a mutató továbbra is fennáll, és rámutat arra, hogy más újra kiosztott adatok vagy már törölt memória vannak
  • az a probléma, amely akkor lép fel, amikor megpróbálunk törölni vagy újból elhelyezni egy olyan memóriát, amelyet már töröltünk, vagy valamilyen más objektumhoz áthelyeztünk
  • eltávolítja az adatszerkezetekkel kapcsolatos problémákat vagy hibákat, hatékonyan kezeli a memóriát és az adatkezelést
  • elkerülhetőek a memóriaszivárgások vagy a memória kimerülésének problémái

Lásd a kézi memóriakezelés és a szemétgyűjtés, az előnyök, hátrányok, valamint a C ++ alkalmazásban történő alkalmazásának részletes megértését.

Kézi memóriakezelés

A halomból dinamikusan elosztott memóriát fel kell szabadítani, amint abbahagyjuk a memória használatát. A dinamikusan elosztott memória a memóriát veszi a halomból, amely szabad memóriatár.

A C ++ rendszerben ez a memóriaelosztás és az üzlethelyzet manuálisan történik, például az új, törlés parancsokkal. Az „új” memória felhasználása a halomból történik. Használata után ezt a memóriát törölni kell a 'törlés' paranccsal.

Minden „új” memóriaelosztást „töröl” paranccsal kell befejezni. Ha nem, akkor eltűnik a memória.

Hogy egy példával világosan megmutassuk:

n = új minta_objektum;
A ******* használat itt megvalósul *******
n törlés;

Amint az ábrán látható, minden újnak véget kell érnie vagy meg kell emelkednie egy törlési paranccsal. Az n mutatóra a memória az 'új' paranccsal van hozzárendelve, és a 'minta_objekt' elnevezésű objektumra hivatkozik vagy mutat rá. Miután a mutató használata és működése befejeződött, fel kell szabadítania vagy fel kell szabadítania a memóriát a 'törlés' paranccsal, a fentiek szerint.

Szemétgyűjtés esetén a memóriát az 'új' paranccsal kell kiosztani, de azt nem kell manuálisan kiadni az 'törlés' gombbal. Ilyen esetekben a szemetesgyűjtő rendszeresen ellenőrzi, hogy nincs-e szabad memória. Ha egy memóriadarabot semmilyen tárgy nem mutat, az törli vagy felszabadítja a memóriát, így több szabad terület halmozódik fel.

A kézi memóriakezelés előnyei és hátrányai

A kézi memóriakezelés előnyei abban állnak, hogy a felhasználó teljes ellenőrzést gyakorolhat mind a kiosztási, mind az üzletkiosztási műveletek felett, és azt is tudja, mikor van egy új memória kiosztva, és mikor osztják el vagy engedik el. Szemétgyűjtés esetén ugyanakkor a használat után a memória nem kerül felszabadításra, akkor felszabadul, amikor az időszakos művelet során találkozik vele.

A kézi memóriakezelés esetén a pusztítót ugyanabban a pillanatban hívják meg, amikor a 'törlés' parancsot hívjuk. De a nem végrehajtott hulladékgyűjtő esetén.

Néhány kérdés kapcsolódik a kézi memóriakezelés használatához. Előfordulhat, hogy duplán töröljük a foglalt memóriát. A már törölt mutató vagy memória törlésekor előfordulhat, hogy a mutató más adatokra hivatkozik, és felhasználható lehet.

Egy másik probléma, amely a kézi memóriakezelés során felmerül, ha kivételt kap az új memóriához hozzárendelt mutató végrehajtása vagy használata során, akkor az kikerül az „új” és a „törlés” sorozatából, és a kiadási művelet nem lesz teljesített. Ezenkívül problémákat okozhat a memória szivárgása.

A szemétgyűjtő előnyei és hátrányai

A szemétgyűjtés egyik fő hátránya a fel nem használt memória megtalálásához és törléséhez szükséges idő vagy a CPU-ciklusok akkor is, ha a felhasználó tudja, melyik mutatómemória szabadon engedhető és nem használható. Egy másik hátrány az, hogy nem tudjuk, mikor töröljük, vagy mikor hívják fel a pusztítót.

Szemétgyűjtési algoritmus

Számos hulladékgyűjtési algoritmus létezik, például referenciaszámlálás, jelölés és söpörés, másolás, stb. A jobb megértés érdekében lássuk el egy algoritmust részletesen. Például, amikor látjuk a referenciaszámláló algoritmust, minden dinamikus memória referenciaszámmal fog rendelkezni. Referencia létrehozásakor a referenciaszám növekszik, és ha a referenciát törlik, akkor a referenciaszám csökken. Amint a referenciaszám nullá válik, ez azt mutatja, hogy a memória kihasználatlan és felszabadítható.

Ez az algoritmus megvalósítható C ++ formában egy adott mutatótípus felhasználásával. Egy adott mutatótípust be kell jelenteni, és ez felhasználható többek között az összes létrehozott referencia nyomon követésére, a referenciaszámok nyomon követésére a referencia létrehozásakor és törlésekor. A C ++ program tartalmazhatja a kézi memóriakezelést és a hulladékgyűjtést ugyanabban a programban. Igény szerint felhasználható akár a normál mutató, akár az adott szemétszedő mutató.

Összefoglalva tehát, a szemetes gyűjtés a kézi memóriakezeléssel ellentétes módszer. A szemetesgyűjtőben a memória automatikusan felszabadul időszakos időnként vagy meghatározott kritériumok alapján, amelyek megmutatják, hogy már nem használják-e. Mindkét módszernek megvannak a maga előnyei és hátrányai. Ez a függvény összetettsége szerint valósítható meg és használható, a használt nyelvetől és hatályától függően.

Ajánlott cikkek

Ez egy útmutató a C ++ szemétgyűjtéshez. Itt tárgyaljuk a kézi memóriakezelést és a szemetesgyűjtési algoritmust, valamint az előnyöket és hátrányokat. A további javasolt cikkeken keresztül további információkat is megtudhat -

  1. Konstruktor és romboló Java-ban
  2. C ++ karakterlánc-funkciók
  3. Destructor Java
  4. C ++ alkalmazások a valós világban
  5. A C ++ 11 legfontosabb tulajdonságai és előnyei

Kategória: