logo

Afvalinzameling in C

In computertalen is afvalinzameling is een cruciaal onderdeel van geheugenbeheer. Het is de procedure waarbij het geheugen van een programma automatisch wordt geïdentificeerd en vrijgegeven. C-programmering heeft geen ingebouwde mogelijkheden voor het verzamelen van afval, omdat het een laag niveau programmeertaal. Er zijn echter een aantal bibliotheken die garbagecollection-functies bieden voor C-programma's. In dit artikel zullen we de garbage collection in C onderzoeken en hoe deze wordt geïmplementeerd met behulp van de, Böhm-Demers-Weiser bibliotheek voor vuilnisophalers.

C biedt mechanismen voor geheugenbeheer op laag niveau via zijn malloc() En gratis() functies . De free() methode wordt gebruikt om geheugen vrij te geven wanneer het niet langer nodig is, terwijl de malloc() functie wordt gebruikt om geheugen dynamisch toe te wijzen tijdens runtime. De fundamentele syntaxis van deze functies is als volgt:

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

Een verwijzing naar het begin van het toegewezen geheugen wordt geretourneerd door de malloc() functie in ruil voor een argument dat het aantal toe te wijzen bytes specificeert. Het geheugen dat eerder was toegewezen door de malloc() methode wordt vrijgegeven door de gratis() functie , waardoor het toegankelijk wordt voor aanvullende toewijzingen.

venster.open javascript

Hoewel het geheugenbeheersysteem van C veel flexibiliteit biedt, legt het ook de last van het geheugenbeheer bij de programmeur. Geheugenlekken kunnen het gevolg zijn van oneigenlijk gebruik van geheugenbeheerroutines wanneer geheugen wordt toegewezen maar nooit wordt vrijgegeven, of van segmentatiefouten, waarbij toegang wordt verkregen tot geheugen nadat het is vrijgegeven.

Een geheugenbeheertechniek genaamd afvalinzameling identificeert en geeft automatisch geheugen vrij dat niet langer door een programma wordt gebruikt. Afvalinzameling maakt het voor de programmeur niet nodig om het geheugen handmatig te beheren, waardoor het risico op geheugenlekken en segmentatiefouten kleiner wordt.

Voor het C-programma is de Böhm-Demers-Weiser aanbiedingen voor vuilnisverzamelaars afval verzamelen mogelijkheden. Geheugen kan worden toegewezen met behulp van de verzameling functies van de bibliotheek, die ook kan worden gebruikt om automatisch geheugen te identificeren en vrij te geven dat niet langer in gebruik is. De bibliotheek beschikt over een markeren en vegen techniek om geheugen te vinden en vrij te geven.

gigabyte versus megabyte

Syntaxis:

De basissyntaxis van de Böhm-Demers-Weiser De functies van de garbage collector-bibliotheek zijn als volgt:

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

In deze syntaxis wordt de GC_calloc()-functie wordt gebruikt om geheugen toe te wijzen en te initialiseren nul , terwijl de GC_malloc()-functie wijst geheugen dynamisch toe. Vergelijkbaar met de realloc() methode in C, de GC_realloc() functie wordt gebruikt om geheugen opnieuw toe te wijzen. Geheugenvrijgave wordt bereikt via de GC_free() methode .

Laten we eens kijken naar een illustratie van de Böhm-Demers-Weiser vuilnisverzamelaarbibliotheek in actie. Het volgende programma maakt gebruik van de GC_malloc()-functie om geheugen toe te wijzen voor elk knooppunt terwijl het een gekoppelde lijst met gehele getallen opbouwt. Daarna worden de waarden van de gekoppelde lijst afgedrukt en wordt het programma beëindigd.

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

Uitgang:

De volgende uitvoer wordt geproduceerd wanneer het programma wordt uitgevoerd:

 1 2 3 4 5 6 7 8 9 10 

Uitleg:

In dit voorbeeld gebruiken we eerst de GC_INIT() functie om de garbage collector te initialiseren. Daarna wordt het hoofdknooppunt van de gekoppelde lijst gemaakt met behulp van de GC_malloc() methode en de huidige aanwijzer wordt gewijzigd zodat deze ernaar wijst. De volgende stap is het gebruik van een lus om meer knooppunten aan de gekoppelde lijst toe te voegen, waarbij de waarde van elk knooppunt aan de lusteller wordt toegewezen. variabele ik en de volgende verwijzing naar het knooppunt erna in de lijst. Om het einde van de lijst aan te geven, zetten we uiteindelijk de volgende pointer van het laatste knooppunt in de lijst op NUL .

Gebruik maken van een herhalingslus om door de lijst te gaan en de waarde van elk knooppunt af te drukken, en vervolgens drukken we de waarden in de gekoppelde lijst af. Eindelijk wij retour 0 om aan te geven dat het programma succesvol is uitgevoerd.

Conclusie

In dit blogartikel hebben we gekeken naar de Böhm-Demers-Weiser implementatie van garbage collector bibliotheek in C. We onderzochten de fundamentele syntaxis van de functies van de garbage collector bibliotheek en lieten zien hoe je deze kunt gebruiken in een eenvoudig voorbeeldprogramma. We spraken ook over de output van het voorbeeldprogramma en het belang ervan.

java-typevariabele

Algemeen, afvalinzameling is een cruciale aanpak die C-programmeurs kan helpen bij beter en effectiever geheugenbeheer. C-programmeurs kunnen profiteren van garbagecollection terwijl ze een taal op laag niveau gebruiken met behulp van de Böhm-Demers-Weiser afvalverzamelaarpakket.