Che cos'è C ++ Garbage Collection?

La garbage collection è una tecnica di gestione della memoria. È un metodo di gestione della memoria automatica separato che viene utilizzato nei linguaggi di programmazione in cui la gestione manuale della memoria non è preferita o eseguita. Nel metodo di gestione manuale della memoria, l'utente è tenuto a menzionare la memoria che è in uso e che può essere deallocata, mentre il garbage collector raccoglie la memoria che è occupata da variabili o oggetti che non sono più in uso nel programma. Solo la memoria sarà gestita dai garbage collector, altre risorse come i distruttori, la finestra di interazione dell'utente o i file non saranno gestite dal garbage collector.

Poche lingue hanno bisogno di garbage collector come parte della lingua per una buona efficienza. Queste lingue sono chiamate lingue raccolte con immondizia. Ad esempio, Java, C # e la maggior parte dei linguaggi di scripting richiedono la garbage collection come parte del loro funzionamento. Mentre linguaggi come C e C ++ supportano la gestione manuale della memoria che funziona in modo simile al Garbage Collector. Esistono poche lingue che supportano sia la garbage collection che l'allocazione / deallocazione della memoria gestita manualmente e, in tali casi, un mucchio di memoria separato verrà allocato al garbage collector e alla memoria manuale.

Alcuni dei bug possono essere prevenuti quando si utilizza il metodo di garbage collection. Ad esempio:

  • problema del puntatore penzolante in cui la memoria puntata è già deallocata mentre il puntatore rimane ancora e punta a diversi dati riassegnati o memoria già eliminata
  • il problema che si verifica quando proviamo a cancellare o deallocare una seconda memoria che è già stata cancellata o riallocata su qualche altro oggetto
  • rimuove i problemi o i bug associati alle strutture di dati e gestisce in modo efficiente la memoria e i dati
  • perdite di memoria o problemi di esaurimento della memoria possono essere evitati

Vediamo una comprensione dettagliata della gestione manuale della memoria rispetto alla garbage collection, vantaggi, svantaggi e come viene implementato in C ++.

Gestione manuale della memoria

La memoria allocata in modo dinamico durante il runtime dall'heap deve essere rilasciata quando smettiamo di usare quella memoria. La memoria allocata in modo dinamico prende la memoria dall'heap, che è un archivio gratuito di memoria.

In C ++ questa allocazione di memoria e deallocazione vengono eseguite manualmente usando comandi come new, delete. L'uso della 'nuova' memoria viene allocato dall'heap. Dopo il suo utilizzo, questa memoria deve essere cancellata usando il comando 'cancella'.

Ogni allocazione di memoria con 'nuovo' deve essere terminata con un comando 'cancella'. Altrimenti andremo via dalla memoria.

Per mostrarlo chiaramente con un esempio:

n = nuovo oggetto_campione;
******* l'utilizzo è implementato qui *******
cancella n;

Come mostrato, ogni nuovo dovrebbe terminare o inclinarsi con un comando di eliminazione. Qui n puntatore viene allocata memoria usando il comando 'new' e viene referenziata o puntata a un oggetto chiamato 'sample_object'. Una volta completati l'utilizzo e il funzionamento del puntatore, dovremmo rilasciare o liberare la memoria usando il comando 'delete' come sopra.

Ma in caso di garbage collection, la memoria viene allocata usando il comando 'new' ma non è necessario rilasciarla manualmente usando 'delete'. In tali casi, il Garbage Collector esegue periodicamente il controllo della memoria disponibile. Quando un pezzo di memoria non è puntato da alcun oggetto, cancella o rilascia la memoria creando più spazio di memoria libero.

Vantaggi e svantaggi della gestione manuale della memoria

I vantaggi della gestione manuale della memoria sono che l'utente avrebbe il controllo completo sulle operazioni di allocazione e deallocazione e anche sapere quando viene allocata una nuova memoria e quando viene deallocata o rilasciata. Ma nel caso della garbage collection, nella stessa identica istanza dopo l'uso la memoria non verrà rilasciata verrà rilasciata quando la incontra durante l'operazione periodica.

Anche nel caso della gestione manuale della memoria, il distruttore verrà chiamato nello stesso momento in cui chiameremo il comando 'cancella'. Ma nel caso di Garbage Collector che non è implementato.

Esistono alcuni problemi associati all'utilizzo della gestione manuale della memoria. A volte potremmo tendere a raddoppiare la memoria occupata. Quando eliminiamo il puntatore o la memoria già eliminati, ci sono possibilità che il puntatore possa fare riferimento ad altri dati e che possa essere in uso.

Un altro problema che abbiamo nella gestione manuale della memoria è, se otteniamo un'eccezione durante l'esecuzione o l'utilizzo del nuovo puntatore allocato in memoria, uscirà dalla sequenza di "nuovo" ed "elimina" e l'operazione di rilascio non sarà eseguita. Inoltre, possono esserci problemi di perdita di memoria.

Vantaggi e svantaggi di Garbage Collector

Uno dei principali svantaggi della garbage collection è il tempo impiegato o i cicli della CPU necessari per trovare la memoria inutilizzata ed eliminarla, anche se l'utente sa quale memoria del puntatore può essere rilasciata e non in uso. Un altro svantaggio è che non sapremo l'ora in cui verrà eliminato né quando verrà chiamato il distruttore.

Algoritmo di raccolta rifiuti

Esistono molti algoritmi di garbage collection come conteggio dei riferimenti, mark e sweep, copia, ecc. Vediamo un algoritmo in dettaglio per una migliore comprensione. Ad esempio, quando vediamo l'algoritmo di conteggio dei riferimenti, ogni memoria dinamica avrà un conteggio dei riferimenti. Quando viene creato un riferimento, il conteggio dei riferimenti aumenta e ogni volta che un riferimento viene eliminato il conteggio dei riferimenti viene ridotto. Una volta che il conteggio dei riferimenti diventa zero, mostra che la memoria è inutilizzata e può essere rilasciata.

Questo algoritmo può essere implementato in C ++ utilizzando un tipo di puntatore specifico. È necessario dichiarare un tipo di puntatore specifico che può essere utilizzato per scopi come tenere traccia di tutti i riferimenti creati, tenere traccia del conteggio dei riferimenti quando il riferimento viene creato ed eliminato. Un programma C ++ può contenere sia la gestione manuale della memoria che la garbage collection che si verificano nello stesso programma. A seconda delle necessità, è possibile utilizzare il puntatore normale o il puntatore del Garbage Collector specifico.

Quindi, per riassumere, la garbage collection è un metodo opposto alla gestione manuale della memoria. In un Garbage Collector, la memoria viene rilasciata automaticamente in base a un periodo di tempo periodico o in base a criteri specifici che indicano se non è più in uso. Entrambi i metodi hanno i loro vantaggi e svantaggi. Questo può essere implementato e utilizzato in base alla complessità della funzione, a seconda del linguaggio utilizzato e del suo ambito.

Articoli consigliati

Questa è una guida a C ++ Garbage Collection. Qui discutiamo della gestione manuale della memoria e dell'algoritmo di garbage collection insieme ai vantaggi e agli svantaggi. Puoi anche consultare i nostri altri articoli suggeriti per saperne di più -

  1. Costruttore e distruttore in Java
  2. Funzioni stringa C ++
  3. Distruttore in Java
  4. Applicazioni del C ++ nel mondo reale
  5. Principali 11 caratteristiche e vantaggi di C ++

Categoria: