logo

La raccolta dei rifiuti in C

Nei linguaggi informatici, raccolta dei rifiuti è una componente cruciale della gestione della memoria. È la procedura con cui la memoria di un programma viene automaticamente identificata e rilasciata. La programmazione C non dispone di funzionalità di garbage collection integrate perché è a basso livello linguaggio di programmazione. Tuttavia, esistono numerose librerie che offrono funzionalità di garbage collection per i programmi C. In questo articolo esamineremo la garbage collection in C e come viene implementata utilizzando, Boehm-Demers-Weiser libreria di raccolta dei rifiuti.

C offre meccanismi di gestione della memoria di basso livello attraverso il suo malloc() E funzioni gratuite() . IL metodo gratuito() viene utilizzato per liberare memoria quando non è più necessaria, mentre il funzione malloc() viene utilizzato per allocare la memoria in modo dinamico durante il runtime. La sintassi fondamentale di queste funzioni è la seguente:

 void* malloc(size_t size); void free(void* ptr); 

Un puntatore all'inizio della memoria allocata viene restituito da malloc() funzione in cambio di un argomento che specifica il numero di byte da allocare. La memoria precedentemente allocata da metodo malloc() viene rilasciato dal funzione libera() , rendendolo accessibile per ulteriori assegnazioni.

Sebbene il sistema di gestione della memoria del C consenta molta flessibilità, pone anche l'onere della gestione della memoria sul programmatore. Le perdite di memoria possono derivare da un uso improprio delle routine di gestione della memoria quando la memoria viene allocata ma mai rilasciata o da errori di segmentazione, in cui si accede alla memoria dopo che è stata rilasciata.

Una tecnica di gestione della memoria chiamata raccolta dei rifiuti identifica e rilascia automaticamente la memoria che non viene più utilizzata da un programma. Raccolta dei rifiuti rende superflua la gestione manuale della memoria da parte del programmatore, riducendo così il rischio di perdite di memoria ed errori di segmentazione.

Per il programma C, il Boehm-Demers-Weiser Offerte della libreria Garbage Collector raccolta dei rifiuti capacità. La memoria può essere allocata utilizzando la raccolta di funzioni della libreria, che può essere utilizzata anche per identificare e rilasciare automaticamente la memoria che non è più in uso. La biblioteca impiega a marca e spazza tecnica per trovare e rilasciare la memoria.

Sintassi:

La sintassi di base di Boehm-Demers-Weiser Le funzioni della libreria Garbage Collector sono le seguenti:

 #include void* GC_malloc(size_t size); void* GC_calloc(size_tnmemb, size_t size); void* GC_realloc(void* ptr, size_t size); void GC_free(void* ptr); 

In questa sintassi, il Funzione GC_calloc() viene utilizzato per allocare memoria e inizializzarla su zero , mentre il Funzione GC_malloc() alloca la memoria in modo dinamico. Simile al metodo realloc() in C, il GC_realloc() la funzione viene utilizzata per riassegnare la memoria. Il rilascio della memoria viene effettuato tramite Metodo GC_free() .

Diamo un'occhiata a un'illustrazione del Boehm-Demers-Weiser libreria Garbage Collector in azione. Il seguente programma utilizza il file Funzione GC_malloc() per allocare memoria per ciascun nodo mentre crea un elenco collegato di numeri interi. Successivamente, vengono stampati i valori dell'elenco collegato e il programma termina.

 #include #include typedef struct node { int value; struct node* next; } node; int main() { GC_INIT(); node* head = GC_malloc(sizeof(node)); node* current = head; for (int i = 1; ivalue = i; current->next = GC_malloc(sizeof(node)); current = current->next; } current->next = NULL; current = head; while (current != NULL) { printf('%d
', current->value); current = current->next; } return 0; } 

Produzione:

All'esecuzione del programma viene prodotto il seguente output:

nome dei caratteri speciali
 1 2 3 4 5 6 7 8 9 10 

Spiegazione:

In questo esempio, utilizziamo prima il file GC_INIT() funzione per inizializzare il Garbage Collector. Successivamente, il nodo head dell'elenco collegato viene creato utilizzando il file Metodo GC_malloc() e il puntatore corrente viene modificato in modo da puntarlo. Il passaggio successivo consiste nell'utilizzare un ciclo per aggiungere più nodi all'elenco collegato, assegnando il valore di ciascun nodo al contatore del ciclo variabile i e il suo successivo puntatore al nodo successivo nell'elenco. Per segnalare la fine della lista, impostiamo infine il puntatore successivo dell'ultimo nodo della lista su NULLO .

Usare un ciclo while per scorrere l'elenco e stampare il valore di ciascun nodo, quindi stampare i valori nell'elenco collegato. Infine, noi restituire 0 per dimostrare che il programma è stato eseguito correttamente.

Conclusione

In questo articolo del blog, abbiamo esaminato il Boehm-Demers-Weiser implementazione della raccolta dei rifiuti da parte della libreria Garbage Collector in C. Abbiamo esaminato la sintassi fondamentale delle funzioni della libreria Garbage Collector e mostrato come utilizzarle in un semplice programma di esempio. Abbiamo parlato anche dei risultati del programma campione e della sua importanza.

Complessivamente, raccolta dei rifiuti è un approccio cruciale che può aiutare i programmatori C a gestire la memoria in modo migliore e più efficace. I programmatori C possono trarre profitto dalla garbage collection utilizzando un linguaggio di basso livello utilizzando il Boehm-Demers-Weiser pacchetto di raccolta dei rifiuti.