logo

Odvoz smeća u C

U računalnim jezicima, kolekcija smeća je ključna komponenta upravljanja memorijom. To je postupak automatskog identificiranja i oslobađanja memorije programa. C programiranju nedostaju ugrađene mogućnosti skupljanja smeća jer je a niska razina programski jezik. Međutim, postoji niz biblioteka koje nude značajke skupljanja smeća za C programe. U ovom ćemo članku ispitati sakupljanje smeća u C-u i kako se ono implementira pomoću, Boehm-Demers-Weiser knjižnica skupljača smeća.

C nudi mehanizme upravljanja memorijom niske razine kroz svoj malloc() i funkcije free(). . The metoda free(). koristi se za oslobađanje memorije kada više nije potrebna, dok funkcija malloc(). koristi se za dinamičku dodjelu memorije tijekom izvođenja. Osnovna sintaksa ovih funkcija je sljedeća:

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

Pokazivač na početak dodijeljene memorije vraća malloc() funkciju u zamjenu za argument koji specificira broj bajtova koji će se dodijeliti. Memorija koju je prethodno dodijelio metoda malloc(). je objavljen od strane funkcija free(). , čineći ga dostupnim za dodatna izdvajanja.

Iako C-ov sustav upravljanja memorijom omogućuje veliku fleksibilnost, on također stavlja teret upravljanja memorijom na programera. Curenje memorije može biti posljedica nepravilnog korištenja rutina upravljanja memorijom kada je memorija dodijeljena, ali nikad oslobođena ili grešaka u segmentaciji, gdje se memoriji pristupa nakon što je oslobođena.

otvorite izbornik postavki

Tehnika upravljanja memorijom tzv kolekcija smeća automatski identificira i oslobađa memoriju koju program više ne koristi. Kolekcija smeća čini nepotrebnim da programer ručno upravlja memorijom, što smanjuje rizik od curenja memorije i pogrešaka u segmentaciji.

mamta kulkarni glumac

Za C program, Boehm-Demers-Weiser sakupljač smeća knjižnica nudi sakupljanje smeća mogućnostima. Memorija se može dodijeliti korištenjem zbirke funkcija biblioteke, koje se također mogu koristiti za automatsku identifikaciju i oslobađanje memorije koja se više ne koristi. U knjižnici je zaposlena a mark-and-weep tehnika za pronalaženje i oslobađanje sjećanja.

Sintaksa:

Osnovna sintaksa Boehm-Demers-Weiser funkcije biblioteke skupljača smeća su sljedeće:

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

U ovoj sintaksi, GC_calloc() funkcija koristi se za dodjelu memorije i njezino inicijaliziranje nula , dok je GC_malloc() funkcija dinamički dodjeljuje memoriju. Slično kao i metoda realloc(). u C, GC_realloc() funkcija se koristi za ponovno dodjeljivanje memorije. Oslobađanje memorije postiže se putem GC_free() metoda .

Pogledajmo ilustraciju Boehm-Demers-Weiser knjižnica skupljača smeća na djelu. Sljedeći program koristi GC_malloc() funkcija za dodjelu memorije za svaki čvor dok gradi povezanu listu cijelih brojeva. Nakon toga se ispisuju vrijednosti povezane liste, a program se tada prekida.

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

Izlaz:

Excel datumska razlika

Kada se program pokrene, proizvodi se sljedeći izlaz:

 1 2 3 4 5 6 7 8 9 10 

Obrazloženje:

U ovom primjeru prvo koristimo GC_INIT() funkcija za pokretanje sakupljača smeća. Nakon toga, glavni čvor povezanog popisa kreira se pomoću GC_malloc() metoda , a trenutni pokazivač se mijenja tako da pokazuje na njega. Sljedeći korak je korištenje petlje za dodavanje više čvorova na povezani popis, dodjeljivanje vrijednosti svakog čvora brojaču petlje varijabla i i njegov sljedeći pokazivač na čvor nakon njega na listi. Kako bismo signalizirali kraj popisa, konačno postavljamo sljedeći pokazivač zadnjeg čvora na popisu na NULL .

Korištenje a while petlja da prođemo kroz popis i ispišemo vrijednost svakog čvora, a zatim ispišemo vrijednosti u povezanom popisu. Konačno, mi vratiti 0 pokazati da je program uspješno izveden.

Zaključak

U ovom članku na blogu pogledali smo Boehm-Demers-Weiser implementacija skupljanja smeća u biblioteci skupljača smeća u C. Ispitali smo temeljnu sintaksu funkcija biblioteke sakupljača smeća i pokazali kako ih koristiti u jednostavnom primjeru programa. Također smo razgovarali o rezultatu oglednog programa i njegovoj važnosti.

Sve u svemu, kolekcija smeća je ključni pristup koji može pomoći C programerima u boljem i učinkovitijem upravljanju memorijom. C programeri mogu profitirati od skupljanja smeća dok koriste jezik niske razine koristeći Boehm-Demers-Weiser paket sakupljača smeća.

kada završava q1