logo

Affaldsopsamling i C

På computersprog, dagrenovation er en afgørende komponent i hukommelsesstyring. Det er proceduren for, at et programs hukommelse automatisk identificeres og frigives. C-programmering mangler indbyggede affaldsindsamlingsmuligheder, fordi det er en lavt niveau programmeringssprog. Der er dog en række biblioteker, der tilbyder affaldsindsamlingsfunktioner til C-programmer. I denne artikel vil vi undersøge affaldsindsamling i C, og hvordan det implementeres ved hjælp af, Bøhm-Demers-Weiser skraldesamler bibliotek.

C tilbyder mekanismer til hukommelsesstyring på lavt niveau gennem sin malloc() og free() funktioner . Det free() metode bruges til at frigive hukommelse, når den ikke længere er påkrævet, mens malloc() funktion bruges til at allokere hukommelse dynamisk under kørsel. Disse funktioners grundlæggende syntaks er som følger:

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

En pointer til begyndelsen af ​​den tildelte hukommelse returneres af malloc() funktion i bytte for et argument, der angiver antallet af bytes, der skal tildeles. Den hukommelse, der tidligere blev tildelt af malloc() metode er udgivet af free() funktion , hvilket gør det tilgængeligt for yderligere tildelinger.

Mens C's hukommelsesstyringssystem giver mulighed for en masse fleksibilitet, lægger det også byrden af ​​hukommelsesstyring på programmøren. Hukommelseslækager kan skyldes ukorrekt brug af hukommelseshåndteringsrutiner, når hukommelsen er allokeret, men aldrig frigivet, eller segmenteringsfejl, hvor hukommelsen tilgås, efter at den er blevet frigivet.

En hukommelseshåndteringsteknik kaldet dagrenovation identificerer og frigiver automatisk hukommelse, der ikke længere bruges af et program. Dagrenovation gør det unødvendigt for programmøren at styre hukommelsen manuelt, hvilket mindsker risikoen for hukommelseslækager og segmenteringsfejl.

For C-program er Bøhm-Demers-Weiser skraldesamler bibliotek tilbyder affaldsindsamling kapaciteter. Hukommelse kan allokeres ved hjælp af bibliotekets samling af funktioner, som også kan bruges til automatisk at identificere og frigive hukommelse, der ikke længere er i brug. Biblioteket beskæftiger en marker-og-fej teknik til at finde og frigive hukommelse.

Syntaks:

Den grundlæggende syntaks for Bøhm-Demers-Weiser affaldsopsamlerbibliotekets funktioner 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 syntaks er GC_calloc() funktion bruges til at allokere hukommelse og initialisere den til nul , hvorimod GC_malloc() funktion allokerer hukommelse dynamisk. Svarende til realloc() metode i C, den GC_realloc() funktionen bruges til at omtildele hukommelse. Hukommelsesfrigivelse opnås via GC_free() metode .

Lad os se på en illustration af Bøhm-Demers-Weiser skraldesamlerbibliotek i aktion. Følgende program bruger GC_malloc() funktion at allokere hukommelse til hver node, da den opbygger en sammenkædet liste over heltal. Derefter udskrives den linkede listes værdier, og programmet afsluttes.

hvordan man finder skærmstørrelse
 #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; } 

Produktion:

Følgende output produceres, når programmet køres:

 1 2 3 4 5 6 7 8 9 10 

Forklaring:

I dette eksempel bruger vi først GC_INIT() funktion til at initialisere affaldsopsamleren. Derefter oprettes den linkede listes hovedknude ved hjælp af GC_malloc() metode , og den aktuelle markør ændres til at pege på den. Det næste trin er at bruge en sløjfe til at tilføje flere noder til den sammenkædede liste, ved at tildele hver nodes værdi til looptælleren variabel i og dens næste pointer til noden efter den på listen. For at signalere listens afslutning sætter vi endelig den næste pointer for den sidste node på listen til NUL .

Ved hjælp af en mens loop at gå listen igennem og udskrive værdien af ​​hver node, og så udskriver vi værdierne i den linkede liste. Endelig vi returnere 0 for at vise, at programmet kørte med succes.

Konklusion

I denne blogartikel kiggede vi på Bøhm-Demers-Weiser garbage collector librarys implementering af garbage collection i C. Vi undersøgte den grundlæggende syntaks for funktionerne i garbage collector biblioteket og viste, hvordan man bruger dem i et enkelt eksempelprogram. Vi talte også om prøveprogrammets output og dets betydning.

Samlet set, dagrenovation er en afgørende tilgang, der kan hjælpe C-programmører med bedre og mere effektiv hukommelsesstyring. C-programmører kan drage fordel af affaldsindsamling, mens de bruger et sprog på lavt niveau ved hjælp af Bøhm-Demers-Weiser skraldeopsamlerpakke.