Stack ja Heap
Muistinhallinta on perusmuistin käsittelemiseksi tai hallitsemiseksi käytetyn käyttöjärjestelmän perustavanlaatuinen ilmiö tietokoneen muistin käyttöoikeuksien hallitsemiseksi. Tavoitteena on estää minkään prosessin pääsy muistiin, jota ei ole vielä varattu sille.
Käyttöjärjestelmä jakaa muistin jokaiselle prosessille, joka on jaettu segmentteihin. Stack ja Heap ovat kaksipuolinen muisti, joka on allokoitu käyttöjärjestelmässä.
Pino-segmenttiä käytetään paikallisten funktiomuuttujien tallentamiseen, jotka luodaan automaattisesti, kun taas kasa-segmenttiä käytetään dynaamisesti varattuun muistiin.
Molemmat tallennetaan tietokoneen RAM-muistille ja ne voivat kasvaa ja kutistua ohjelman toteutuksen aikana. Keskustelemme kahdesta yksityiskohdasta ja verrataan niitä, jotta voimme ymmärtää, mikä on parempi.
Mikä on Stack?
Stack-segmentti on muistinhallintatekniikka, jota käytetään staattisen muistin allokointiin. Se on tietokoneen muistiin erikoinen alue, jota käytetään paikallisten toimintamuuttujien tallentamiseen. Kun toimintoa kutsutaan, muisti allokoidaan kaikkiin paikallisiin muuttujiin jonnekin ja voit käyttää näitä muuttujia, kun tunnet sijaintisi. Muistilohkot vapautetaan, kun toiminto loppuu. Stack on yksi tapa toteuttaa tämä prosessi tehokkaasti. Ajattele sitä perusdatarakenteena, jossa kohteet järjestetään päällekkäin, kuten pino. Samoin paikallisia muuttujia voidaan käyttää työntämällä ja pukemalla. Työnnä tarkoitetaan kohteen lisäämistä pinoon ja popping-keinoihin, jotka hakevat kohteita pinoilta. Tavaroita voi käyttää pinoon viimeisen ensimmäisessä (LIFO) -järjestyksessä.
Mikä on Heap?
Heap tarkoittaa suurta muistivarastoa, jota käytetään dynaamisessa muistin allokoinnissa, mikä tarkoittaa, että muisti pysyy allokoiduna, kunnes ohjelma loppuu tai muisti vapautetaan. Muisti allokoidaan satunnaisesti, joten muistista ei ole helppoa. Toisin kuin pino-segmentti, elementit vapautetaan päinvastaisessa järjestyksessä kuin ne alunperin annettiin. Yksinkertaisesti sanottuna muisti varataan ohjelmille pyynnöstä ja vapautuu, kun sitä ei enää tarvita. Kappaleet ovat riippumattomia toisistaan, joten niitä voidaan käyttää, kun ohjelma toimii ja vapautuu ohjelman lopettamisen jälkeen. Se on kuin maailmanlaajuinen muistialue, jota käytetään tallentamaan globaaleja muuttujia ja monia muuttujia, jotka viittaavat siihen.
Pino ja kasa
Merkitys Stack ja Heap
Tietokonearkkitehtuurissa pino on tietokonemallin erityinen alue, joka on nimenomaisesti määritetty automaattisille muuttujille. Ohjelmoinnissa automaattinen muuttuja on paikallinen muuttuja, jolloin muuttujan laajuus on paikallinen lohkoon, jossa se on ilmoitettu. Muisti liitetään automaattisesti näihin muuttujiin lohkolle saapumisen jälkeen ja muisti vapautetaan poistumishetkellä. Heap, toisaalta, on osa tietokoneen muistia, jota käytetään dynaamisissa muistin allokoinnissa, eli muistiosuuksia jaetaan ja kohdennetaan satunnaisesti.
Muistinmääritys Stackille ja Heapille
Pinoa käytetään paikallisten muuttujien tallentamiseen ja niiden laajuus määritellään funktion sisällä. Teknisesti pino tukee staattisen muistin allokointia, joka vastaa paikallisia staattisia muuttujia ja laajuusmuuttujia. Muisti allokoidaan ennen ohjelman suorittamista, yleensä koottua aikaa ja käytettyä tietorakennetta kutsutaan pinoksi. Heapia käytetään toisaalta dynaamiseen muistiallokointiin, eli muistia osoitetaan manuaalisesti rytmissä ohjelman suorittamisen aikana. Ohjelmat vaativat muistia, yleensä solmun lisäämistä tietorakenteeseen ja palautuvat, jos niitä ei tarvita.
Pääsy Stackiin ja Heapiin
CPU hoitaa ja optimoi pinoa, ja tietoja käsitellään viimeisimmässä ensimmäisessä (LIFO) järjestyksessä. LIFO viittaa tiedon tallennusmenetelmään muistipinoissa, joissa viimeisin muistin lohko on ensimmäinen, joka vapautuu ja päinvastoin. Tämä tekee tehokkaasta muistinhallinnasta. Kappaleen elementit päinvastoin ovat toisistaan riippumattomia ja tietoja voidaan käyttää mielivaltaisesti, joten muistilohkoa voidaan jakaa ja vapauttaa milloin tahansa riippumatta järjestyksestä. Pinoista poiketen kasoista ei ole määriteltyä mallia muistilohkojen jakamista ja poistamista varten.
Muuttujat Stack ja Heap
Muisti hallitaan automaattisesti pinoon ja muuttujat allokoidaan ja poistetaan automaattisesti, mikä tarkoittaa, että pino on varattu vain väliaikaisille muuttujille. Paikalliset muuttujat tulevat aktiivisiksi, kun funktio suoritetaan ja kun se päättyy, muuttujat menevät soveltamisalan ulkopuolelle, joten muuttujan laajuus on paikallinen funktioon ja on olemassa niin kauan kuin tämä funktio suoritetaan. Toisin kuin pino, muistia kohdennetaan, kun ohjelma toimii kasassa, mikä tekee siitä hieman hitaamman pääsyn tähän tallennettuihin muuttujiin. Koska lohkojen varaamisessa ei ole erityistä järjestystä, muistilohkoja voidaan jakaa ja vapauttaa milloin tahansa.
Stack vs. Heap: vertailu kaavio
Yhteenveto Stack vs. Heap
Molemmat ovat tavallisimpia muistin allokointimuotoja ja ne tallennetaan tietokoneen RAM-muistissa tehokasta muistinhallintaa varten. Pinoon pääsy muistiin on kuitenkin nopeaa, koska muistia hallitaan automaattisesti, kun taas kasassa on muistia käsin käsittelemättä, joten sinun täytyy jakaa vapaa muisti itse, kun lohkoja ei enää tarvita. Stack on ilmeisesti nopeampi ja helppokäyttöisempi joustavuutensa ansiosta, mutta sillä on tasapuolinen osuus eduista ja haitoista. Vaikka pinoon ei ole rajoitettu muistikokoa, se on hieman vaikea toteuttaa. Masa on hitaampaa kuin pino, mutta sen toteutus on yksinkertaisempaa.