Søppelmann

En søppelsamler er en implisitt minnehåndteringsmekanisme implementert i noen tolkede eller semi - tolkede programmeringsspråk .

Kort historisk gjennomgang

Konseptet med søppelinnsamling ble oppfunnet av John McCarthy i 1958 for å unngå manuell minnehåndtering på Lisp -språket . [ 1 ]

Kontekst

Ethvert dataprogram bruker en viss mengde arbeidsminne som er gjort tilgjengelig for det av operativsystemet . Dette minnet må administreres av programmet selv for å:

Vanligvis har programmereren et kodebibliotek som tar seg av disse oppgavene. Det er imidlertid programmererens eget ansvar å bruke dette biblioteket riktig.

Dette har fordelen med effektiv minnebruk, dvs. minneplasser frigjøres når de ikke lenger er nødvendige. Denne eksplisitte minnestyringsmekanismen er imidlertid utsatt for feil. For eksempel kan en programmerer glemme å frigjøre minne slik at det før eller senere ikke er noe minne igjen, og avbryter kjøringen av programmet.

Som et alternativ er implisitt minnebehandling nødvendig , slik at programmereren ikke er klar over tildeling og frigjøring av minne. Dette kreves i noen programmeringsspråk der minnebegrepet ikke håndteres. For eksempel på deklarative språk som Lisp eller Prolog .

Operasjon

Når et språk har søppelinnsamling, trenger ikke programmereren å ringe en subrutine for å frigjøre minne. Minnetildeling er også mer eller mindre automatisk uten programmerers innblanding. For eksempel:

Når programmet er kompilert , inkluderes automatisk en søppeloppsamler - subrutine i programmet . Denne subrutinen kalles også med jevne mellomrom uten innblanding fra programmereren.

Søppelsamleren blir informert om alle minnetildelinger som forekommer i programmet. I tillegg bidrar kompilatoren til å gjøre det mulig å holde styr på alle referansene som finnes til en viss reservert minneplass.

Når søppelsamleren påkalles, går den gjennom listen over plassholdere og ser på referanseantallet for hver plassholder. Hvis en teller har nådd null betyr det at minneplassen ikke lenger brukes og derfor kan frigjøres.

Naturligvis bruker denne prosessen en viss tid hvor ingenting virkelig nyttig for formålet med programmet er gjort. Derfor kan den ikke påberopes for ofte.

Følgelig er den eneste ulempen med denne mekanismen å bestemme når søppelsamleren må kjøre. Det er flere algoritmer for å gjøre det, men den mest effektive er den første:

Fordeler og ulemper

Fordelene og ulempene med denne minnestyringsmekanismen er det motsatte av den eksplisitte mekanismen:

Implementering

Det er mulighet for å implementere søppelinnsamling som bare et annet kodebibliotek, men dette er generelt ikke tilfelle. Selve utformingen av visse programmeringsspråk gjør eksistensen av søppelsamleren nødvendig. For å implementere disse språkene, kreves to handlinger:

Eksempler på språk med søppelsamler

Se også

Referanser

  1. ^ McCarthy, John (30. april 1960). "Rekursive funksjoner av symbolske uttrykk og deres beregning med maskin, del I" (pdf) . Stanford University (på engelsk) . s. 27. Arkivert fra originalen 2001-11-26 . Hentet 14. april 2020 . «Vi har allerede kalt denne prosessen «søppelinnsamling», men jeg antar at jeg slapp å bruke den i avisen – ellers ville ikke Research Laboratory of Electronics grammatikkdamer la meg. »  

Eksterne lenker