logo

Roskakeräys paikassa C

Tietokonekielillä, Roskakokoelma on tärkeä osa muistinhallintaa. Se on prosessi, jossa ohjelman muisti tunnistetaan ja vapautetaan automaattisesti. C-ohjelmoinnista puuttuu sisäänrakennetut roskatkeräysominaisuudet, koska se on a matala taso ohjelmointikieli. On kuitenkin olemassa useita kirjastoja, jotka tarjoavat roskienkeräysominaisuuksia C-ohjelmille. Tässä artikkelissa tutkimme roskien keräämistä C:ssä ja kuinka se toteutetaan käyttämällä Boehm-Demers-Weiser roskakorikirjasto.

C tarjoaa matalan tason muistinhallintamekanismeja kauttaan malloc() ja free()-funktiot . The ilmainen()-menetelmä käytetään muistin vapauttamiseen, kun sitä ei enää tarvita, kun taas malloc()-funktio käytetään muistin varaamiseen dynaamisesti ajon aikana. Näiden funktioiden perussyntaksi on seuraava:

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

Osoittimen varatun muistin alkuun palauttaa malloc() funktio vastineeksi allokoitavien tavujen määrän määrittävästä argumentista. Muisti, jonka malloc() -menetelmä vapauttaa free()-funktio , jolloin se on käytettävissä lisämäärärahoja varten.

mikä on desktop ini

Vaikka C:n muistinhallintajärjestelmä mahdollistaa paljon joustavuutta, se asettaa myös muistinhallinnan taakan ohjelmoijalle. Muistivuoto voi johtua muistin hallintarutiinien virheellisestä käytöstä, kun muistia varataan, mutta sitä ei vapauteta, tai segmentointivirheistä, joissa muistia käytetään sen vapauttamisen jälkeen.

Muistinhallintatekniikka ns Roskakokoelma tunnistaa ja vapauttaa automaattisesti muistin, jota ohjelma ei enää käytä. Roskakokoelma tekee ohjelmoijan tarpeettomaksi hallita muistia manuaalisesti, mikä vähentää muistivuotojen ja segmentointivirheiden riskiä.

C-ohjelmalle Boehm-Demers-Weiser jätteenkeräilijäkirjasto tarjoaa roskien kerääminen kykyjä. Muistia voidaan varata kirjaston toimintokokoelman avulla, jonka avulla voidaan myös tunnistaa ja vapauttaa automaattisesti ei enää käytössä oleva muisti. Kirjastossa työskentelee mm merkki ja lakaisu tekniikka muistin löytämiseksi ja vapauttamiseksi.

Syntaksi:

Kohteen perussyntaksi Boehm-Demers-Weiser roskankeräyskirjaston toiminnot ovat seuraavat:

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

Tässä syntaksissa GC_calloc()-funktio käytetään muistin varaamiseen ja alustamiseen nolla , kun taas GC_malloc()-funktio varaa muistia dynaamisesti. Samanlainen kuin realloc() -menetelmä C:ssä, GC_realloc() -toimintoa käytetään muistin määrittämiseen uudelleen. Muistin vapauttaminen tapahtuu käyttämällä GC_free()-metodi .

Katsotaanpa esimerkkiä Boehm-Demers-Weiser roskakorikirjasto toiminnassa. Seuraava ohjelma käyttää GC_malloc()-funktio varata muistia kullekin solmulle, kun se rakentaa linkitetyn kokonaislukuluettelon. Tämän jälkeen linkitetyn listan arvot tulostetaan ja ohjelma päättyy.

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

Lähtö:

Ohjelmaa suoritettaessa tuotetaan seuraava tulos:

 1 2 3 4 5 6 7 8 9 10 

Selitys:

len of array javassa

Tässä esimerkissä käytämme ensin GC_INIT() toiminto roskakeräimen alustamiseksi. Tämän jälkeen linkitetyn luettelon pääsolmu luodaan käyttämällä GC_malloc() -metodi , ja nykyinen osoitin muutetaan osoittamaan sitä. Seuraava vaihe on silmukan avulla lisätä solmuja linkitettyyn luetteloon ja määrittää kunkin solmun arvo silmukkalaskuriin. muuttuja i ja sen seuraava osoitin sen jälkeiseen solmuun luettelossa. Signaaliaksemme listan päättymisestä asetimme lopulta listan viimeisen solmun seuraavaksi osoittimeksi TYHJÄ .

Käyttää kun silmukka käydäksesi luettelon läpi ja tulostaaksesi kunkin solmun arvon, ja sitten tulostamme linkitetyn luettelon arvot. Lopuksi me paluu 0 osoittaakseen, että ohjelma toimi onnistuneesti.

kasa lajitella

Johtopäätös

Tässä blogiartikkelissa tarkastelimme Boehm-Demers-Weiser roskakeräyskirjaston roskankeräyksen toteutus C-kielellä. Tutkimme roskakeräyskirjaston funktioiden perussyntaksia ja osoitimme kuinka niitä käytetään suoraviivaisessa esimerkkiohjelmassa. Puhuimme myös malliohjelman tuotoksesta ja sen tärkeydestä.

Yleensä ottaen, Roskakokoelma on ratkaiseva lähestymistapa, joka voi auttaa C-ohjelmoijia parempaan ja tehokkaampaan muistinhallintaan. C-ohjelmoijat voivat hyötyä roskien keräämisestä samalla kun he käyttävät matalan tason kieltä Boehm-Demers-Weiser roskakoripaketti.