logo

Сакупљање смећа у Ц

На компјутерским језицима, отпад је кључна компонента управљања меморијом. То је поступак аутоматског идентификовања и ослобађања меморије програма. Ц програмирању недостају уграђене могућности сакупљања смећа јер је а низак ниво програмски језик. Међутим, постоји велики број библиотека које нуде функције сакупљања смећа за Ц програме. У овом чланку ћемо испитати сакупљање смећа у Ц-у и како се оно имплементира помоћу, Боехм-Демерс-Веисер библиотека сакупљача смећа.

шта су селектори у цсс-у

Ц нуди механизме за управљање меморијом ниског нивоа кроз своје маллоц() и фрее() функције . Тхе фрее() метод се користи за ослобађање меморије када више није потребна, док је маллоц() функција се користи за динамичку доделу меморије током времена рада. Основна синтакса ових функција је следећа:

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

Показивач на почетак додељене меморије враћа маллоц() функција у замену за аргумент који специфицира број бајтова који ће бити додељени. Меморија коју је претходно доделио маллоц() метода је пуштен од стране фрее() функција , чинећи га доступним за додатна издвајања.

Иако Ц-ов систем за управљање меморијом омогућава велику флексибилност, он такође ставља терет управљања меморијом на програмера. До цурења меморије може доћи услед неправилне употребе рутина за управљање меморијом када се меморија додељује, али се никада не ослобађа, или грешака у сегментацији, где се меморији приступа након што је ослобођена.

Техника управљања меморијом тзв отпад аутоматски идентификује и ослобађа меморију коју програм више не користи. Отпад чини непотребним да програмер ручно управља меморијом, што смањује ризик од цурења меморије и грешака у сегментацији.

За Ц програм, Боехм-Демерс-Веисер нуди библиотека сакупљача смећа сакупљање смећа способности. Меморија се може доделити коришћењем збирке функција библиотеке, која се такође може користити за аутоматску идентификацију и ослобађање меморије која више није у употреби. Библиотека запошљава а марк-анд-свееп техника проналажења и ослобађања меморије.

Синтакса:

Основна синтакса Боехм-Демерс-Веисер Функције библиотеке сакупљача смећа су следеће:

755 цхмод
 #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); 

У овој синтакси, тхе ГЦ_цаллоц() функција се користи за доделу меморије и иницијализацију на нула , док је ГЦ_маллоц() функција динамички додељује меморију. Слично као реаллоц() метода у Ц, тхе ГЦ_реаллоц() функција се користи за додељивање меморије. Ослобађање меморије се постиже преко ГЦ_фрее() метода .

Хајде да погледамо илустрацију Боехм-Демерс-Веисер библиотека сакупљача смећа у акцији. Следећи програм користи ГЦ_маллоц() функција да додели меморију за сваки чвор док гради повезану листу целих бројева. Након тога, вредности повезане листе се штампају, а програм се завршава.

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

Излаз:

Следећи излаз се производи када се програм покрене:

 1 2 3 4 5 6 7 8 9 10 

Објашњење:

супв

У овом примеру прво користимо ГЦ_ИНИТ() функција за иницијализацију сакупљача смећа. Након тога, главни чвор повезане листе се креира помоћу Метода ГЦ_маллоц(). , а тренутни показивач се мења тако да показује на њега. Следећи корак је коришћење петље за додавање више чворова на повезану листу, додељивање вредности сваког чвора бројачу петље променљива и и његов следећи показивач на чвор после њега на листи. Да бисмо сигнализирали крај листе, коначно смо поставили следећи показивач последњег чвора на листи на НУЛА .

Користећи вхиле петља да прођемо кроз листу и одштампамо вредност сваког чвора, а затим штампамо вредности у повезаној листи. Коначно, ми врати 0 да покаже да је програм успешно покренут.

јава хелло програм

Закључак

У овом чланку на блогу погледали смо Боехм-Демерс-Веисер Имплементација сакупљања смећа библиотеке смећа у Ц. Испитали смо основну синтаксу библиотечких функција сакупљача смећа и показали како их користити у једноставном примеру програма. Такође смо разговарали о резултатима узорка програма и његовој важности.

Све у свему, отпад је кључни приступ који може помоћи Ц програмерима у бољем и ефикаснијем управљању меморијом. Ц програмери могу да профитирају од сакупљања смећа док користе језик ниског нивоа користећи Боехм-Демерс-Веисер пакет за прикупљање смећа.