På dataspråk, søppelsamling er en avgjørende komponent i minnehåndtering. Det er prosedyren for at et programs minne automatisk identifiseres og frigjøres. C-programmering mangler innebygde søppeloppsamlingsmuligheter fordi det er en lavt nivå programmeringsspråk. Imidlertid er det en rekke biblioteker som tilbyr søppeloppsamlingsfunksjoner for C-programmer. I denne artikkelen vil vi undersøke søppelinnsamling i C og hvordan det implementeres ved hjelp av, Boehm-Demers-Weiser søppelsamlerbibliotek.
C tilbyr minnestyringsmekanismer på lavt nivå gjennom sin malloc() og free() funksjoner . De gratis() metode brukes til å frigjøre minne når det ikke lenger er nødvendig, mens malloc() funksjon brukes til å tildele minne dynamisk under kjøretid. Disse funksjonenes grunnleggende syntaks er som følger:
void* malloc(size_t size); void free(void* ptr);
En peker til begynnelsen av det tildelte minnet returneres av malloc() funksjon i bytte mot et argument som spesifiserer antall byte som skal tildeles. Minnet som tidligere ble tildelt av malloc() metode er utgitt av free() funksjon , noe som gjør det tilgjengelig for ytterligere tildelinger.
Mens Cs minnestyringssystem gir mulighet for mye fleksibilitet, legger det også byrden med minneadministrasjon på programmereren. Minnelekkasjer kan skyldes feil bruk av minnebehandlingsrutiner når minne er allokert, men aldri frigitt, eller segmenteringsfeil, der minne får tilgang etter at det har blitt frigitt.
En minnehåndteringsteknikk kalt søppelsamling identifiserer og frigjør automatisk minne som ikke lenger brukes av et program. Søppelsamling gjør det unødvendig for programmereren å administrere minne manuelt, noe som reduserer risikoen for minnelekkasjer og segmenteringsfeil.
For C-programmet er Boehm-Demers-Weiser søppelsamlerbibliotek tilbyr søppelinnsamling evner. Minne kan tildeles ved hjelp av bibliotekets samling av funksjoner, som også kan brukes til automatisk å identifisere og frigjøre minne som ikke lenger er i bruk. Biblioteket har en marker-og-fei teknikk for å finne og frigjøre minne.
Syntaks:
Den grunnleggende syntaksen til Boehm-Demers-Weiser funksjonene for søppelsamlerbiblioteket er som følger:
#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);
I denne syntaksen er GC_calloc() funksjon brukes til å tildele minne og initialisere det til null , mens GC_malloc() funksjon tildeler minne dynamisk. Ligner på realloc()-metoden i C, den GC_realloc() funksjonen brukes til å tildele minne på nytt. Minnefrigjøring oppnås via GC_free() metode .
La oss ta en titt på en illustrasjon av Boehm-Demers-Weiser søppelsamlerbibliotek i aksjon. Følgende program bruker GC_malloc() funksjon å tildele minne for hver node når den bygger en koblet liste over heltall. Deretter skrives den koblede listens verdier ut, og programmet avsluttes.
hvordan finne skjermstørrelsen
#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; }
Produksjon:
Følgende utgang produseres når programmet kjøres:
1 2 3 4 5 6 7 8 9 10
Forklaring:
I dette eksemplet bruker vi først GC_INIT() funksjon for å initialisere søppelsamleren. Etter det opprettes den koblede listens hodenode ved hjelp av GC_malloc() metode , og gjeldende peker endres til å peke på den. Det neste trinnet er å bruke en sløyfe til å legge til flere noder til den koblede listen, og tilordne hver nodes verdi til looptelleren variabel i og dens neste peker til noden etter den i listen. For å signalisere listens slutt, setter vi til slutt den neste pekeren til den siste noden i listen til NULL .
Bruker en mens loop å gå gjennom listen og skrive ut verdien til hver node, og så skriver vi ut verdiene i den koblede listen. Til slutt, vi returner 0 for å vise at programmet kjørte vellykket.
Konklusjon
I denne bloggartikkelen så vi på Boehm-Demers-Weiser garbage collector librarys implementering av søppelinnsamling i C. Vi undersøkte den grunnleggende syntaksen til søppelsamlerbibliotekets funksjoner og viste hvordan man bruker dem i et enkelt eksempelprogram. Vi snakket også om prøveprogrammets produksjon og viktigheten.
Alt i alt, søppelsamling er en avgjørende tilnærming som kan hjelpe C-programmerere med bedre og mer effektiv minnebehandling. C-programmerere kan tjene på søppelinnsamling mens de bruker et lavnivåspråk ved å bruke Boehm-Demers-Weiser søppelsamlerpakke.