logo

Recollida d'escombraries a C

En llenguatges informàtics, recollida d'escombraries és un component crucial de la gestió de la memòria. És el procediment per identificar i alliberar automàticament la memòria d'un programa. La programació C no té capacitats de recollida d'escombraries integrades perquè és a nivell baix llenguatge de programació. Tanmateix, hi ha diverses biblioteques que ofereixen funcions de recollida d'escombraries per a programes C. En aquest article, examinarem la recollida d'escombraries en C i com s'implementa amb el, Boehm-Demers-Weiser biblioteca d'escombraries.

C ofereix mecanismes de gestió de memòria de baix nivell mitjançant el seu malloc() i funcions free(). . El mètode free(). s'utilitza per alliberar memòria quan ja no és necessària, mentre que el funció malloc(). s'utilitza per assignar memòria dinàmicament durant el temps d'execució. La sintaxi fonamental d'aquestes funcions és la següent:

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

Es retorna un punter al començament de la memòria assignada malloc() funció a canvi d'un argument que especifiqui el nombre de bytes que cal assignar. La memòria que havia estat assignada prèviament pel mètode malloc(). és alliberat pel funció free(). , fent-lo accessible per a assignacions addicionals.

fer el bucle while a java

Tot i que el sistema de gestió de memòria de C permet una gran flexibilitat, també posa la càrrega de la gestió de la memòria al programador. Les fuites de memòria poden derivar d'un ús inadequat de les rutines de gestió de la memòria quan la memòria s'assigna però mai no s'allibera o d'errors de segmentació, on s'accedeix a la memòria després d'haver estat alliberada.

Una tècnica de gestió de la memòria anomenada recollida d'escombraries identifica i allibera automàticament la memòria que ja no utilitza un programa. Recollida d'escombraries fa innecessari que el programador gestione la memòria manualment, la qual cosa redueix el risc de fuites de memòria i errors de segmentació.

Per al programa C, el Boehm-Demers-Weiser Ofertes de la biblioteca de recollida d'escombraries recollida d'escombraries capacitats. La memòria es pot assignar mitjançant la col·lecció de funcions de la biblioteca, que també es pot utilitzar per identificar i alliberar automàticament la memòria que ja no s'utilitza. La biblioteca empra a marca i escombra tècnica per trobar i alliberar la memòria.

Sintaxi:

La sintaxi bàsica del Boehm-Demers-Weiser Les funcions de la biblioteca del col·lector d'escombraries són les següents:

mapa mecanografiat
 #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); 

En aquesta sintaxi, el Funció GC_calloc(). s'utilitza per assignar memòria i inicialitzar-la zero , mentre que el Funció GC_malloc(). assigna la memòria de manera dinàmica. Similar a la mètode realloc(). en C, el GC_realloc() La funció s'utilitza per reassignar memòria. L'alliberament de memòria s'aconsegueix mitjançant el Mètode GC_free(). .

Fem una ullada a una il·lustració del Boehm-Demers-Weiser biblioteca de recollida d'escombraries en acció. El programa següent utilitza el Funció GC_malloc(). per assignar memòria per a cada node mentre construeix una llista enllaçada d'enters. Després d'això, s'imprimeixen els valors de la llista enllaçada i el programa finalitza.

 #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; } 

Sortida:

mètode tostring java

La sortida següent es produeix quan s'executa el programa:

 1 2 3 4 5 6 7 8 9 10 

Explicació:

En aquest exemple, primer fem servir el GC_INIT() funció per inicialitzar el col·lector d'escombraries. Després d'això, el node principal de la llista enllaçada es crea amb el Mètode GC_malloc(). , i el punter actual es canvia per apuntar-hi. El següent pas és utilitzar un bucle per afegir més nodes a la llista enllaçada, assignant el valor de cada node al comptador de bucles. variable i i el seu següent punter al node després d'ell a la llista. Per assenyalar el final de la llista, finalment establim el punter següent de l'últim node de la llista a NUL .

Utilitzant a bucle while per passar per la llista i imprimir el valor de cada node, i després imprimim els valors a la llista enllaçada. Finalment, nosaltres retorn 0 per demostrar que el programa s'ha executat correctament.

aws sns

Conclusió

En aquest article del blog, hem mirat el Boehm-Demers-Weiser Implementació de la biblioteca del col·lector d'escombraries en C. Vam examinar la sintaxi fonamental de les funcions de la biblioteca del col·lector d'escombraries i vam mostrar com utilitzar-les en un programa d'exemple senzill. També hem parlat del resultat del programa de mostra i de la seva importància.

En general, recollida d'escombraries és un enfocament crucial que pot ajudar els programadors C a una gestió de memòria millor i més eficaç. Els programadors C poden beneficiar-se de la recollida d'escombraries mentre utilitzen un llenguatge de baix nivell amb el Boehm-Demers-Weiser paquet de recollida d'escombraries.