logo

Atkritumu savākšana C

Datoru valodās, atkritumu kolekcija ir būtiska atmiņas pārvaldības sastāvdaļa. Tā ir programma, kas automātiski identificē un atbrīvo programmas atmiņu. C programmēšanai trūkst iebūvētu atkritumu savākšanas iespēju, jo tā ir a zems līmenis programmēšanas valoda. Tomēr ir vairākas bibliotēkas, kas piedāvā atkritumu savākšanas līdzekļus C programmām. Šajā rakstā mēs apskatīsim atkritumu savākšanu C valodā un to, kā tā tiek īstenota, izmantojot, Bēms-Demers-Veizers atkritumu savācēju bibliotēka.

C piedāvā zema līmeņa atmiņas pārvaldības mehānismus malloc () un bezmaksas() funkcijas . The bezmaksas() metode tiek izmantots, lai atbrīvotu atmiņu, kad tā vairs nav nepieciešama, savukārt malloc() funkcija tiek izmantots, lai izpildlaikā dinamiski piešķirtu atmiņu. Šo funkciju pamatsintakse ir šāda:

drukāt zvaigžņu rakstu
 void* malloc(size_t size); void free(void* ptr); 

Rādītājs uz piešķirtās atmiņas sākumu tiek atgriezts malloc () funkcija apmaiņā pret argumentu, kas norāda piešķiramo baitu skaitu. Atmiņa, ko iepriekš piešķīra malloc() metode atbrīvo bezmaksas () funkcija , padarot to pieejamu papildu piešķīrumiem.

Lai gan C atmiņas pārvaldības sistēma nodrošina lielu elastību, tā arī uzliek programmētājam atmiņas pārvaldības slogu. Atmiņas noplūdes var izraisīt nepareiza atmiņas pārvaldības rutīnu izmantošana, kad atmiņa ir piešķirta, bet nekad netiek atbrīvota, vai segmentācijas kļūdas, kad atmiņai tiek piekļūts pēc tās atbrīvošanas.

Atmiņas pārvaldības paņēmiens, ko sauc atkritumu kolekcija automātiski identificē un atbrīvo atmiņu, ko programma vairs neizmanto. Atkritumu kolekcija Programmētājam nav nepieciešams manuāli pārvaldīt atmiņu, kas samazina atmiņas noplūdes un segmentācijas kļūdu risku.

sagatavoties testa mockito

Programmai C, Bēms-Demers-Veizers atkritumu savācēju bibliotēkas piedāvājumi atkritumu savākšana iespējas. Atmiņu var piešķirt, izmantojot bibliotēkas funkciju kolekciju, ko var izmantot arī, lai automātiski identificētu un atbrīvotu atmiņu, kas vairs netiek izmantota. Bibliotēkā strādā a iezīmēt un slaucīt Atmiņas atrašanas un atbrīvošanas tehnika.

Sintakse:

Pamata sintakse Bēms-Demers-Veizers atkritumu savācēja bibliotēkas funkcijas ir šādas:

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

Šajā sintaksē GC_calloc() funkcija tiek izmantots, lai piešķirtu atmiņu un inicializētu to nulle , savukārt GC_malloc() funkcija dinamiski piešķir atmiņu. Līdzīgi kā realloc() metode C, GC_realloc() funkcija tiek izmantota, lai atkārtoti piešķirtu atmiņu. Atmiņas atbrīvošana tiek veikta, izmantojot GC_free() metode .

Apskatīsim ilustrāciju par Bēms-Demers-Veizers atkritumu savācēja bibliotēka darbībā. Sekojošā programma izmanto GC_malloc() funkcija lai piešķirtu atmiņu katram mezglam, veidojot saistītu veselu skaitļu sarakstu. Pēc tam tiek izdrukātas saistītā saraksta vērtības, un programma tiek pārtraukta.

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

Izvade:

Palaižot programmu, tiek iegūta šāda izvade:

string int
 1 2 3 4 5 6 7 8 9 10 

Paskaidrojums:

Šajā piemērā mēs vispirms izmantojam GC_INIT() funkcija, lai inicializētu atkritumu savācēju. Pēc tam saistītā saraksta galvenais mezgls tiek izveidots, izmantojot GC_malloc() metode , un pašreizējais rādītājs tiek mainīts, lai norādītu uz to. Nākamais solis ir izmantot cilpu, lai saistītajam sarakstam pievienotu citus mezglus, piešķirot katra mezgla vērtību cilpas skaitītājam. mainīgais i un tā nākamais rādītājs uz mezglu aiz tā sarakstā. Lai signalizētu par saraksta beigām, mēs beidzot iestatām nākamo saraksta pēdējā mezgla rādītāju uz NULL .

Izmantojot a kamēr cilpa lai izietu cauri sarakstam un izdrukātu katra mezgla vērtību, un tad mēs izdrukājam vērtības saistītajā sarakstā. Visbeidzot, mēs atgriezt 0 lai parādītu, ka programma darbojās veiksmīgi.

Secinājums

Šajā emuāra rakstā mēs apskatījām Bēms-Demers-Veizers atkritumu savācēja bibliotēkas atkritumu savākšanas ieviešana C. Mēs pārbaudījām atkritumu savācēja bibliotēkas funkciju fundamentālo sintaksi un parādījām, kā tās izmantot vienkāršā paraugprogrammā. Mēs arī runājām par programmas parauga rezultātu un tā nozīmi.

Kopumā atkritumu kolekcija ir ļoti svarīga pieeja, kas var palīdzēt C programmētājiem labāk un efektīvāk pārvaldīt atmiņu. C programmētāji var gūt labumu no atkritumu savākšanas, vienlaikus izmantojot zema līmeņa valodu, izmantojot Bēms-Demers-Veizers atkritumu savācēja paka.

apgrieztā virkne java