logo

Šiukšlių surinkimas C

Kompiuterių kalbomis, Šiukšlių kolekcija yra esminis atminties valdymo komponentas. Tai automatiškai atpažįstama ir išleidžiama programos atmintis. C programavimui trūksta integruotų šiukšlių surinkimo galimybių, nes tai yra a žemas lygis programavimo kalba. Tačiau yra keletas bibliotekų, kurios siūlo šiukšlių surinkimo funkcijas C programoms. Šiame straipsnyje mes išnagrinėsime šiukšlių surinkimą C ir kaip tai įgyvendinama naudojant Boehm-Demers-Weiser šiukšlių rinkėjų biblioteka.

C siūlo žemo lygio atminties valdymo mechanizmus malloc () ir free() funkcijos . The nemokamas() metodas naudojamas atminčiai atlaisvinti, kai jos nebereikia, o malloc() funkcija naudojamas dinamiškai paskirstyti atmintį vykdymo metu. Pagrindinė šių funkcijų sintaksė yra tokia:

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

Rodyklė į paskirtos atminties pradžią grąžinama malloc () funkcija mainais į argumentą, nurodantį skiriamų baitų skaičių. Atmintis, kurią anksčiau skyrė malloc() metodas išleidžiamas free() funkcija , todėl jį galima gauti papildomai paskirstyti.

int parseint

Nors C atminties valdymo sistema suteikia daug lankstumo, ji taip pat užkrauna atminties valdymo naštą programuotojui. Atminties nutekėjimas gali atsirasti dėl netinkamo atminties valdymo procedūrų naudojimo, kai atmintis paskirstoma, bet niekada neatleidžiama, arba segmentavimo klaidų, kai atmintis pasiekiama ją atleidus.

Atminties valdymo technika, vadinama Šiukšlių kolekcija automatiškai identifikuoja ir išlaisvina atmintį, kurios programa nebenaudoja. Šiukšlių kolekcija todėl programuotojui nebereikia tvarkyti atminties rankiniu būdu, o tai sumažina atminties nutekėjimo ir segmentavimo klaidų riziką.

C programai Boehm-Demers-Weiser šiukšlių rinkėjų bibliotekos pasiūlymai šiukšlių rinkimas pajėgumus. Atmintis gali būti paskirstoma naudojant bibliotekos funkcijų rinkinį, kuris taip pat gali būti naudojamas automatiškai identifikuoti ir atlaisvinti nebenaudojamą atmintį. Bibliotekoje dirba a žymėti ir nušluoti atminties radimo ir išlaisvinimo technika.

konvertuoti iš eilutės į sveikąjį java

Sintaksė:

Pagrindinė sintaksė Boehm-Demers-Weiser Šiukšlių surinkėjų bibliotekos funkcijos yra tokios:

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

Šioje sintaksėje GC_calloc() funkcija naudojamas atminčiai paskirstyti ir ją inicijuoti nulis , tuo tarpu GC_malloc() funkcija dinamiškai paskirsto atmintį. Panašus į realloc() metodas C, GC_realloc() funkcija naudojama atminčiai iš naujo priskirti. Atmintis išlaisvinama per GC_free() metodas .

Pažvelkime į iliustraciją Boehm-Demers-Weiser veikia šiukšlių rinkėjų biblioteka. Toliau pateikta programa naudoja GC_malloc() funkcija paskirstyti atmintį kiekvienam mazgui, kai jis sukuria susietą sveikųjų skaičių sąrašą. Po to susieto sąrašo reikšmės išspausdinamos, o programa baigiama.

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

Išvestis:

Vykdant programą sukuriama ši išvestis:

javatpoint java
 1 2 3 4 5 6 7 8 9 10 

Paaiškinimas:

Šiame pavyzdyje pirmiausia naudojame GC_INIT() funkcija inicijuoti šiukšlių surinkėją. Po to susieto sąrašo pagrindinis mazgas sukuriamas naudojant GC_malloc() metodas , o dabartinė žymeklis pakeičiamas į jį. Kitas veiksmas yra naudoti kilpą, kad įtrauktumėte daugiau mazgų į susietą sąrašą, priskirdami kiekvieno mazgo reikšmę ciklo skaitikliui kintamasis i ir kitas jo žymeklis į mazgą po jo sąraše. Norėdami pranešti apie sąrašo pabaigą, galiausiai nustatėme kitą paskutinio sąrašo mazgo rodyklę į NULL .

Naudojant a o kilpa Norėdami pereiti sąrašą ir atspausdinti kiekvieno mazgo reikšmę, tada atspausdiname susieto sąrašo reikšmes. Pagaliau mes grąžinti 0 parodyti, kad programa sėkmingai veikė.

Išvada

Šiame tinklaraščio straipsnyje apžvelgėme Boehm-Demers-Weiser šiukšlių surinkėjo bibliotekos įdiegtas šiukšlių surinkimas C. Išnagrinėjome pagrindinę šiukšlių surinkėjo bibliotekos funkcijų sintaksę ir parodėme, kaip jas naudoti paprastoje programoje. Taip pat kalbėjome apie pavyzdinės programos rezultatus ir jos svarbą.

Apskritai Šiukšlių kolekcija yra labai svarbus metodas, galintis padėti C programuotojams geriau ir efektyviau valdyti atmintį. C programuotojai gali pasipelnyti iš šiukšlių surinkimo, naudodami žemo lygio kalbą Boehm-Demers-Weiser šiukšlių surinkėjo pakuotė.