logo

Sophämtning i C

På datorspråk, skräp samling är en avgörande komponent i minneshantering. Det är proceduren för att ett programs minne automatiskt identifieras och släpps. C-programmering saknar inbyggda sopsamlingsmöjligheter eftersom det är en låg nivå programmeringsspråk. Det finns dock ett antal bibliotek som erbjuder sophämtningsfunktioner för C-program. I den här artikeln kommer vi att undersöka sophämtning i C och hur det implementeras med hjälp av Boehm-Demers-Weiser sophämtarbibliotek.

C erbjuder minneshanteringsmekanismer på låg nivå genom sin malloc() och free() funktioner . De free() metod används för att frigöra minne när det inte längre behövs, medan malloc() funktion används för att tilldela minne dynamiskt under körning. Dessa funktioners grundläggande syntax är följande:

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

En pekare till början av det tilldelade minnet returneras av malloc() funktion i utbyte mot ett argument som anger antalet byte som ska tilldelas. Minnet som tidigare tilldelats av malloc() metod släpps av free() funktion , vilket gör den tillgänglig för ytterligare tilldelningar.

Ladda ner vlc media player från YouTube

Även om C:s minneshanteringssystem tillåter en hel del flexibilitet, lägger det också bördan av minneshantering på programmeraren. Minnesläckor kan uppstå på grund av felaktig användning av minneshanteringsrutiner när minne tilldelas men aldrig släpps eller segmenteringsfel, där minnet nås efter att det har släppts.

En minneshanteringsteknik som kallas skräp samling identifierar och släpper automatiskt minne som inte längre används av ett program. Skräp samling gör det onödigt för programmeraren att hantera minnet manuellt, vilket minskar risken för minnesläckor och segmenteringsfel.

För C-program är Boehm-Demers-Weiser sopsamlare bibliotek erbjuder skräpinsamling Förmågor. Minne kan allokeras med hjälp av bibliotekets samling av funktioner, som också kan användas för att automatiskt identifiera och frigöra minne som inte längre används. Biblioteket sysselsätter en markera och sopa teknik för att hitta och frigöra minne.

xd xd betydelse

Syntax:

Den grundläggande syntaxen för Boehm-Demers-Weiser sopsamlarbibliotekets funktioner är följande:

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

I denna syntax är GC_calloc() funktion används för att allokera minne och initiera det till noll , medan GC_malloc() funktion allokerar minne dynamiskt. Liknar realloc() metod i C, den GC_realloc() funktionen används för att omtilldela minne. Minnesfrigöring åstadkommes via GC_free() metod .

Låt oss ta en titt på en illustration av Boehm-Demers-Weiser sopsamlarbibliotek i aktion. Följande program använder GC_malloc() funktion att allokera minne för varje nod när den bygger en länkad lista med heltal. Därefter skrivs den länkade listans värden ut och programmet avslutas.

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

Produktion:

Följande utdata produceras när programmet körs:

 1 2 3 4 5 6 7 8 9 10 

Förklaring:

I det här exemplet använder vi först GC_INIT() funktion för att initiera sopsamlaren. Därefter skapas den länkade listans huvudnod med hjälp av GC_malloc() metod , och den aktuella pekaren ändras till att peka på den. Nästa steg är att använda en loop för att lägga till fler noder till den länkade listan, och tilldela varje nods värde till loopräknaren variabel i och dess nästa pekare till noden efter den i listan. För att signalera listans slut ställer vi slutligen nästa pekare för den sista noden i listan till NULL .

Använder en medan loop att gå igenom listan och skriva ut värdet för varje nod, och sedan skriver vi ut värdena i den länkade listan. Slutligen, vi returnera 0 för att visa att programmet kördes framgångsrikt.

Slutsats

I den här bloggartikeln tittade vi på Boehm-Demers-Weiser garbage collector librarys implementering av sophämtning i C. Vi undersökte den grundläggande syntaxen för funktionerna i garbage collector-biblioteket och visade hur man använder dem i ett enkelt exempelprogram. Vi pratade också om exempelprogrammets produktion och dess betydelse.

python generera uuid

Övergripande, skräp samling är ett avgörande tillvägagångssätt som kan hjälpa C-programmerare med bättre och effektivare minneshantering. C-programmerare kan dra nytta av sophämtning samtidigt som de använder ett lågnivåspråk med hjälp av Boehm-Demers-Weiser sophämtningspaket.