Kas yra nemokamas sąrašas?

Laisvasis sąrašas yra duomenų struktūra, kurioje saugomi kompiuterio atminties vietų adresai, kuriuos gali naudoti veikianti programa naudojant dinaminį atminties paskirstymą. Sąrašas tampa būtinas, kai programa turi skirti vietos. iš laisvos atminties srities, vadinamos krūva. Laisvo sąrašo įgyvendinimas gali būti paprastas susietas sąrašas arba sudėtingesnė duomenų struktūra, pvz., rūšiavimo medis. Dauguma aukšto lygio kompiuterių programavimo kalbų automatiškai tvarko nemokamą sąrašą, todėl nebereikia rankinio valdymo.

Kai programai reikia vietos informacijai saugoti programos vykdymo metu, ji turi pareikalauti konkretaus atminties kiekio iš pagrindinės operacinės sistemos. Atminties blokų, kuriuos galima panaudoti, vietos yra saugomos laisvoje sąrašas. Kad paskirstymas būtų sėkmingas, reikiamas atminties kiekis turi būti pasiekiamas viename ar keliuose iš šių blokų. Kai grąžinama žymeklis į atitinkamą atminties vietą, tas sąrašo elementas pašalinamas.

Kai programa atliekama naudojant atmintį, ji gali ją panaikinti. Tai reiškia, kad žymeklis perkeliamas į atminties bloką atgal į laisvąjį sąrašą, kur jis bus pasiekiamas kitą kartą paskirstant. Atminties paskirstymas gali nepavykti, nes sąrašas tuščias arba todėl, kad nėra pakankamai didelių atminties blokų, kad būtų galima įvykdyti programos užklausą.

Paprasčiausia atminties valdymo forma vadinama „first fit system“ Ši sistema palaiko vieną laisvų atminties vietų sąrašą. Išsiuntus atminties užklausą, sąrašas yra perkeliamas ir pirmasis blokas grąžinamas pakankamai didelis blokas. Jei blokas yra daugiau nei du kartus didesnis už prašomą dydį, tada jis sumažinamas per pusę, o nepanaudota pusė įtraukiama atgal į sąrašą. Šis metodas pakeičia paprastą kodavimą rizika, kad atminties sritys bus suskaidytos, kurios niekada nebus grąžintos į sąrašą.

Kitokia atminties valdymo forma vadinama bičiulių paskirstymo sistema. Skirtingai nei pirmoji tinkama sistema, bičiulių paskirstymas saugo kelis laisvus sąrašus, kurių kiekviename yra tik vieno konkretaus dydžio atviri blokai. Tai reiškia, kad gavus paskirstymo užklausą, peržiūrimas sąrašas, kuriame yra blokai, kurie yra pakankamai dideli, kad užpildytų užklausą, ir grąžinama atvira vieta. Jei nėra laisvų blokų, kurie yra dvigubai didesni Galimi pageidaujami, didesnis blokas yra padalintas į dvi dalis, kad atitiktų reikalavimus.

Terminas „laisvas sąrašas“ gali reikšti vieną susietą atminties adresų sąrašą arba daug sudėtingesnį duomenų struktūros tipą. Skirtingi rūšiavimo medžių tipai, jei jie yra paprasti ir subalansuoti, gali padėti greičiau rasti atvirų atminties blokų, nes tai apsunkina šaltinio kodą. Susietas sąrašas gali būti lėtesnis nei specializuotas rūšiavimo medis, bet sukuria programavimo kodą, kurį skaityti daug lengviau, derinti ir modifikuoti.
Kai kuriose programavimo kalbose ir operacinėse sistemose naudojamas specialus mechanizmas, vadinamas šiukšlių surinkimu. Tai procesas, kuris gali padėti įtraukti skirtingus įrašus į laisvą sąrašą ir sujungti laisvas vietas, kad jos būtų gretimos. užkertamas kelias susiskaidymui ir leidžia paskirstyti didesnius atminties blokus.