logo

Odvoz smeti v C

V računalniških jezikih, Odvoz smeti je ključna komponenta upravljanja pomnilnika. To je postopek, pri katerem se pomnilnik programa samodejno identificira in sprosti. Programiranju C manjkajo vgrajene zmožnosti zbiranja smeti, ker je a nizka stopnja programski jezik. Vendar pa obstajajo številne knjižnice, ki ponujajo funkcije zbiranja smeti za programe C. V tem članku bomo preučili zbiranje smeti v C in kako je implementirano z uporabo, Boehm-Demers-Weiser knjižnica zbiralnik smeti.

razvrščanje java mehurčkov

C ponuja nizkonivojske mehanizme za upravljanje pomnilnika prek svojega malloc() in funkcije free(). . The metoda free(). se uporablja za sprostitev pomnilnika, ko ta ni več potreben, medtem ko funkcijo malloc(). se uporablja za dinamično dodeljevanje pomnilnika med izvajanjem. Osnovna sintaksa teh funkcij je naslednja:

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

Kazalec na začetek dodeljenega pomnilnika vrne malloc() funkcijo v zameno za argument, ki določa število bajtov, ki naj bodo dodeljeni. Pomnilnik, ki ga je prej dodelil metoda malloc(). izdaja funkcija free(). , zaradi česar je dostopen za dodatne dodelitve.

Medtem ko C-jev sistem za upravljanje pomnilnika omogoča veliko prilagodljivosti, breme upravljanja pomnilnika nalaga tudi programerju. Puščanje pomnilnika je lahko posledica nepravilne uporabe rutin za upravljanje pomnilnika, ko je pomnilnik dodeljen, vendar nikoli sproščen, ali napak pri segmentaciji, kjer se do pomnilnika dostopa, potem ko je bil sproščen.

Tehnika upravljanja pomnilnika, imenovana Odvoz smeti samodejno identificira in sprosti pomnilnik, ki ga program ne uporablja več. Odvoz smeti programerju ni treba ročno upravljati pomnilnika, kar zmanjša tveganje uhajanja pomnilnika in napak pri segmentaciji.

Za program C je Boehm-Demers-Weiser ponudbe knjižnice zbiralnik smeti zbiranje smeti zmogljivosti. Pomnilnik je mogoče dodeliti z uporabo knjižnične zbirke funkcij, ki jih je mogoče uporabiti tudi za samodejno prepoznavanje in sprostitev pomnilnika, ki ni več v uporabi. V knjižnici je zaposlena a označi in pomesti tehnika za iskanje in sprostitev spomina.

Sintaksa:

Osnovna sintaksa za Boehm-Demers-Weiser Funkcije knjižnice zbiralnika smeti so naslednje:

izbor sort java
 #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); 

V tej sintaksi je Funkcija GC_calloc(). se uporablja za dodelitev pomnilnika in njegovo inicializacijo nič , medtem ko je Funkcija GC_malloc(). dinamično dodeljuje pomnilnik. Podobno kot pri metoda realloc(). v C, GC_realloc() funkcija se uporablja za ponovno dodelitev pomnilnika. Sprostitev pomnilnika se izvede prek Metoda GC_free(). .

Oglejmo si ilustracijo Boehm-Demers-Weiser knjižnica zbiralnika smeti v akciji. Naslednji program uporablja Funkcija GC_malloc(). da dodeli pomnilnik za vsako vozlišče, ko gradi povezan seznam celih števil. Po tem se natisnejo vrednosti povezanega seznama in program se nato zaključi.

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

Izhod:

Ko se program zažene, se ustvari naslednji izhod:

 1 2 3 4 5 6 7 8 9 10 

Pojasnilo:

moj flixer

V tem primeru najprej uporabimo GC_INIT() funkcijo za inicializacijo zbiralnika smeti. Po tem se ustvari glavno vozlišče povezanega seznama z uporabo Metoda GC_malloc(). in trenutni kazalec se spremeni tako, da kaže nanj. Naslednji korak je uporaba zanke za dodajanje več vozlišč na povezani seznam, pri čemer se vrednost vsakega vozlišča dodeli števcu zanke spremenljivka i in njegov naslednji kazalec na vozlišče za njim na seznamu. Da označimo konec seznama, končno nastavimo naslednji kazalec zadnjega vozlišča na seznamu na NIČ .

Uporaba a medtem ko zanka da gremo skozi seznam in natisnemo vrednost vsakega vozlišča, nato pa natisnemo vrednosti na povezanem seznamu. Končno, mi vrni 0 pokazati, da je program uspešno potekal.

podatkovni tipi java

Zaključek

V tem blogu smo si ogledali Boehm-Demers-Weiser izvajanje zbiranja smeti knjižnice zbiralnika smeti v C. Preučili smo temeljno sintakso funkcij knjižnice zbiralnika smeti in pokazali, kako jih uporabljati v enostavnem vzorčnem programu. Govorili smo tudi o rezultatu vzorčnega programa in njegovem pomenu.

Na splošno, Odvoz smeti je ključen pristop, ki lahko programerjem C pomaga pri boljšem in učinkovitejšem upravljanju pomnilnika. Programerjem C lahko koristi zbiranje smeti, medtem ko uporabljajo jezik nizke ravni z uporabo Boehm-Demers-Weiser paket zbiralnik smeti.