26: Ruslasöfnun og minnisvillur Flashcards
Hvað er ruslasöfnun:
sjálfvirk skil á minni sem úthlutað hefur
verið í kösinni - notendaforrit þurfa ekki sjálf að skila því
Hvar er ruslasöfnun algeng?
Algengt í mörgum kvikum (dynamic) forritunarmálum:
– Python, Ruby, Java, Perl, ML, Lisp, Mathematica
Útgáfur (“íhaldsamir” ruslasafnarar) til fyrir C og C++, afhverju?
Til að henda ekki óvart einhverju mikilvægu
Hvernig veit minnisstýringin hvenær hægt er að skila minni?
Almennt getum við ekki vitað hvað mun verða notað í
framtíðinni
En við getum sagt að sumar blokkir munu ekki verða notaðar,
ef það eru engir bendar á þær lengur
Gefum okkur ákveðnar forsendur um benda
– Minnisstjóri getur greint á milli benda og ekki-benda
– Allir bendar benda á upphaf blokkar
– Ekki hægt að fela benda
(t.d., með því að kasta þeim í int, og síðan aftur til baka)
Helstu ruslasöfnunarreikniritin
Mark-and-sweep
Tilvísanatalning
Afritunarsöfnun
Kynslóðasafnarar
Mark-and-sweep söfnun (McCarthy, 1960)
Færir ekki blokkir (nema ef þjappað um leið)
Tilvísanatalning (Collins, 1960)
Færir ekki blokkir (tölum ekki um hér)
Afritunarsöfnun (Minsky, 1963)
Færir blokkir (tölum ekki um hér)
Kynslóðasafnarar (Lieberman og Hewitt, 1983)
Söfnun byggð á líftíma
- Flestar úthlutanir verða rusl mjög fljótlega
- Einbeitir sér því að minnissvæðum sem nýlega búið að úthlut
Við lítum á minnið eins og stefnunet (directed graph)
Hver blokk er hnútur í netinu
Hver bendir er leggur í netinu
Hólf utan kasarinnar sem innihalda benda inn í kösina kallast
rótarhnútar (t.d. gistu, hólf á hlaða, víðværar breytur)
Hnútur (blokk) er aðgengilegur ef
það er vegur til hans frá einhverri rót
Óaðgengilegir hnútar eru ?
rusl (notendaforrit getur ekki þurft á þeim að halda)
Mark-and-Sweep söfnun
Hægt að byggja ofan á malloc/free pakka
– Úthlutum með malloc þangað til “minnið klárast”
* Þegar minnið hefur klárast:
– Notar auka mark-bita í haus hverrar blokkar
– Mark: Byrja í rótunum og setja mark-bitann í aðgengilegum blokkum
– Sweep: Fara í gegnum allar blokkir og skila ómerktum blokkum
Mark notar ______ til að fara í gegnum minnisnetið
djúpleit