Muistin hallinta on perusilmiö käyttöjärjestelmälle, jota käytetään käsittelemään tai hallitsemaan ensisijaista muistia tietokoneen muistin käyttöoikeuksien hallitsemiseksi. Tavoitteena on estää mitään prosesseja pääsemästä muistiin, jota ei ole vielä osoitettu sille.
Käyttöjärjestelmä varaa muistin jokaiselle prosessille, joka on jaettu segmentteihin. Pino ja Heap ovat kaksi tapaa, joilla muisti allokoidaan käyttöjärjestelmässä.
Pino-segmenttiä käytetään tallentamaan paikalliset toimintomuuttujat, jotka luodaan automaattisesti, kun taas pino-segmenttiä käytetään dynaamisesti varattuun muistiin.
Molemmat tallennetaan tietokoneen RAM-muistiin, ja ne voivat kasvaa ja kutistua ohjelman suorittamisen aikana. Keskustelemme kahdesta yksityiskohtaisesti ja verrataan niitä ymmärtääksesi kumpi on parempi.
Stack-segmentti on muistinhallintatekniikka, jota käytetään staattisen muistin allokointiin. Se on erityinen alue tietokoneen muistissa, jota käytetään paikallisten toimintomuuttujien tallentamiseen. Kun funktiota kutsutaan, muisti varataan kaikille paikallisille muuttujille jossain, ja voit käyttää näitä muuttujia tiedäessäsi niiden sijainnin. Muistilohot vapautetaan, kun toiminto loppuu. Pino on yksi tapa toteuttaa tämä prosessi tehokkaasti. Ajattele sitä perustietorakenteena, jossa kohteet on järjestetty päällekkäin kuin pino. Samoin paikallisiin muuttujiin pääsee työntämällä ja popputtamalla. Työnnä viittaa esineiden lisäämiseen pinoon ja popping tarkoittaa esineiden noutamista pinosta. Kohteita voi käyttää pinosta viimeisenä ensin-ulos (LIFO) -järjestyksessä.
Kasa tarkoittaa suurta muistitasoa, jota käytetään dynaamiseen muistin allokointiin, mikä tarkoittaa, että muisti varataan, kunnes ohjelma lopetetaan tai muisti vapautetaan. Muisti on jaettu satunnaisesti, joten muistiin pääsy ei ole helppoa. Toisin kuin pino-segmentti, elementit vapautetaan päinvastaisessa järjestyksessä kuin ne alun perin allokoitiin. Yksinkertaisesti sanottuna muisti varataan ohjelmille pyynnöstä ja vapautetaan, kun sitä ei enää tarvita. Kasan elementit ovat toisistaan riippumattomia, mikä tarkoittaa, että niihin voidaan päästä ohjelman suorittamisen aikana ja vapauttaa ohjelman päättyessä. Se on kuin globaali muisti, jota käytetään globaalien muuttujien ja monien siihen viittaavien muuttujien tallentamiseen.
Tietokonearkkitehtuurissa pino on erityinen alue tietokoneen muistissa, joka on nimenomaisesti varattu automaattisille muuttujille. Ohjelmoinnissa automaattinen muuttuja on paikallinen muuttuja, joka tarkoittaa muuttujan laajuutta paikallisesti siinä lohkossa, jossa se ilmoitetaan. Muisti allokoidaan automaattisesti näille muuttujille tullessaan lohkoon ja muisti vapautetaan poistumisen yhteydessä. Kasa sitä vastoin on tietokoneen muistin osa, jota käytetään dynaamiseen muistin allokointiin, mikä tarkoittaa, että muistin lohkot allokoidaan ja jaetaan satunnaisella tavalla.
Pinoa käytetään paikallisten muuttujien tallentamiseen, joiden laajuus määritetään toiminnossa. Teknisesti sanottuna pino tukee staattista muistin allokointia, joka vastaa paikallisia staattisia muuttujia ja laajuusmuuttujia. Muisti allokoidaan ennen ohjelman suorittamista, yleensä kokoamisajankohtana, ja käytettyä tietorakennetta kutsutaan pinoksi. Kasa sitä vastoin käytetään dynaamiseen muistin allokointiin, mikä tarkoittaa muistin allokointia käsin suorituksen aikana ohjelman suorituksen aikana. Ohjelmat pyytävät muistia, yleensä solmun lisäämiseksi tietorakenteeseen ja palauttavat, jos niitä ei tarvita.
Pinoa hallitsee ja optimoi CPU, ja tietoihin päästään LIFO (last-in-first-out) -järjestyksessä. LIFO viittaa tietojen tallennusmenetelmään muistipinoissa, joissa viimeisin muistitila vapautetaan ensimmäisenä ja päinvastoin. Tämä mahdollistaa tehokkaan muistinhallinnan. Kasan elementit, päinvastoin, ovat riippumattomia toisistaan ja dataa voidaan käyttää mielivaltaisesti, mikä tarkoittaa, että muistilohko voidaan allokoida ja vapauttaa milloin tahansa niiden järjestyksestä riippumatta. Toisin kuin pinot, kasoilla ei ole mitään selkeää mallia muistilohkojen allokoimiseksi ja jakamiseksi.
Muistia hallitaan automaattisesti pinossa, ja muuttujat allokoidaan ja jaetaan automaattisesti, mikä tarkoittaa, että pino on varattu vain väliaikaisille muuttujille. Paikalliset muuttujat aktivoituvat, kun funktio suoritetaan ja kun se päättyy, muuttujat menevät laajuuden ulkopuolelle, mikä tarkoittaa, että muuttujan laajuus on paikallinen toiminnolle ja on olemassa niin kauan kuin funktio suorittaa. Toisin kuin pinossa, muisti varataan, kun ohjelma toimii kasassa, mikä tekee hiukan hitaammaksi käyttää tähän tallennettuja muuttujia. Koska lohkojen varaamisessa ei ole erityistä järjestystä, muistilohkot voidaan varata ja vapauttaa milloin tahansa.
Molemmat ovat yleisimpiä muistin allokointitapoja, ja ne tallennetaan tietokoneen RAM-muistiin tehokkaan muistinhallinnan varmistamiseksi. Pinoon pääsy muistiin on kuitenkin nopeaa, koska muistia hallitaan automaattisesti, kun taas kasassa muisti on hallittava manuaalisesti, mikä tarkoittaa, että sinun on varattava vapaa muisti itse, kun lohkoja ei enää tarvita. Pino on selvästi nopeampi ja helpompi käyttää joustavuutensa ansiosta, mutta sillä on kohtuullinen osuus eduista ja haitoista. Vaikka pinolla ei ole rajoituksia muistin koosta, sitä on vähän vaikea toteuttaa. Kasa on hitaampaa kuin pino, mutta sen toteutus on yksinkertaisempaa.