logo

Sběr odpadu v C

V počítačových jazycích, sběr odpadků je klíčovou součástí správy paměti. Je to procedura automatické identifikace a uvolnění paměti programu. Programování v C postrádá vestavěné funkce garbage collection, protože je a nízká úroveň programovací jazyk. Existuje však řada knihoven, které nabízejí funkce garbage collection pro C programy. V tomto článku prozkoumáme garbage collection v C a jak je implementován pomocí, Boehm-Demers-Weiser knihovna popelářů.

C nabízí mechanismy správy paměti na nízké úrovni prostřednictvím svého malloc() a funkce free(). . The metoda free(). se používá k uvolnění paměti, když již není potřeba, zatímco funkce malloc(). se používá k dynamickému přidělování paměti během běhu. Základní syntaxe těchto funkcí je následující:

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

Ukazatel na začátek přidělené paměti je vrácen malloc() funkce výměnou za argument určující počet bajtů, které mají být přiděleny. Paměť, která byla dříve přidělena metoda malloc(). je propuštěna funkce free(). , čímž je přístupný pro další přidělení.

listnode java

Zatímco systém správy paměti C umožňuje velkou flexibilitu, také klade zátěž správy paměti na programátora. Úniky paměti mohou být důsledkem nesprávného použití rutin správy paměti, když je paměť alokována, ale nikdy není uvolněna, nebo chyb segmentace, kdy je paměť přístupná po jejím uvolnění.

Technika správy paměti tzv sběr odpadků automaticky identifikuje a uvolní paměť, kterou již program nepoužívá. Odvoz odpadků programátor nemusí spravovat paměť ručně, což snižuje riziko úniku paměti a chyb segmentace.

Pro program C, Boehm-Demers-Weiser knihovna popelářů nabízí sbírání odpadků schopnosti. Paměť lze alokovat pomocí knihovny funkcí, které lze také použít k automatické identifikaci a uvolnění paměti, která se již nepoužívá. Knihovna zaměstnává a označit a zamést technika k nalezení a uvolnění paměti.

metody java string

Syntax:

Základní syntaxe Boehm-Demers-Weiser Funkce knihovny garbage collector jsou následující:

 #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 této syntaxi je funkce GC_calloc(). se používá k přidělení paměti a její inicializaci nula , zatímco funkce GC_malloc(). dynamicky alokuje paměť. Podobné jako metoda realloc(). v C, GC_realloc() funkce se používá k přeřazení paměti. Uvolnění paměti se provádí pomocí metoda GC_free(). .

Podívejme se na ilustraci Boehm-Demers-Weiser Knihovna popelářů v akci. Následující program používá funkce GC_malloc(). k alokaci paměti pro každý uzel při vytváření propojeného seznamu celých čísel. Poté se vytisknou hodnoty propojeného seznamu a program se pak ukončí.

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

Výstup:

Při spuštění programu se vytvoří následující výstup:

 1 2 3 4 5 6 7 8 9 10 

Vysvětlení:

V tomto příkladu nejprve použijeme GC_INIT() funkce pro inicializaci garbage collectoru. Poté se vytvoří hlavní uzel propojeného seznamu pomocí metoda GC_malloc(). a aktuální ukazatel se změní tak, aby ukazoval na něj. Dalším krokem je použití smyčky k přidání dalších uzlů do propojeného seznamu a přiřazení hodnoty každého uzlu čítači smyčky variabilní i a jeho další ukazatel na uzel za ním v seznamu. Abychom signalizovali konec seznamu, nakonec nastavíme další ukazatel posledního uzlu v seznamu na NULA .

Používat zatímco smyčka abychom prošli seznam a vytiskli hodnotu každého uzlu, a pak vytiskneme hodnoty v propojeném seznamu. Konečně my vrátit 0 ukázat, že program úspěšně proběhl.

Závěr

V tomto článku na blogu jsme se podívali na Boehm-Demers-Weiser Implementace garbage collector knihovny pro garbage collect v C. Prozkoumali jsme základní syntaxi funkcí knihovny garbage collector a ukázali jsme, jak je používat v jednoduchém ukázkovém programu. Mluvili jsme také o výstupu ukázkového programu a jeho důležitosti.

'bankéřův algoritmus'

Celkově, sběr odpadků je zásadní přístup, který může pomoci programátorům C v lepší a efektivnější správě paměti. C programátoři mohou těžit z garbage collection a zároveň využívat nízkoúrovňový jazyk pomocí Boehm-Demers-Weiser balíček sběrače odpadků.