Atminties valdymas yra pagrindinis operacinės sistemos, naudojamos tvarkyti ar valdyti pirminę atmintį, reiškinys, siekiant valdyti prieigos prie atminties teises kompiuteryje. Tikslas yra užkirsti kelią bet kokiam procesui pasiekti prie atminties, kuri dar nebuvo jai skirta.
Operacinė sistema skiria atmintį kiekvienam procesui, kuris yra padalintas į segmentus. „Stack“ ir „Heap“ yra du būdai, kaip operacinėje sistemoje paskirstoma atmintis.
Stack segmentas yra naudojamas saugoti vietinius funkcijos kintamuosius, kurie sukuriami automatiškai, tuo tarpu krūvos segmentas naudojamas dinamiškai paskirstytai atminčiai.
Abu jie saugomi kompiuterio RAM ir vykdant programą jie gali augti ir trauktis. Aptarkime du išsamiai ir palyginkime juos, kad suprastume, kuris yra geresnis.
Stack segmentas yra atminties valdymo metodas, naudojamas statiniam atminties paskirstymui. Tai yra speciali sritis kompiuterio atmintyje, naudojama vietiniams funkcijų kintamiesiems laikyti. Kai iškviečiama funkcija, atmintis yra paskirstoma visiems vietiniams kintamiesiems ir jūs galite prieiti prie tų kintamųjų, kai žinote jų vietą. Pasibaigus funkcijai, atminties blokai išlaisvinami. Stack yra vienas iš būdų efektyviai įgyvendinti šį procesą. Pagalvokite apie tai kaip pagrindinę duomenų struktūrą, kai elementai išdėstomi vienas ant kito kaip krūva. Panašiai, vietinius kintamuosius galima pasiekti paspaudus ir iššokant. Stumimas reiškia elementų pridėjimą į krūvą, o iššokimas reiškia daiktų paėmimą iš krūvos. Elementus galima pasiekti iš kamino eiliškumu „paskutinis-į-pirmas“ (LIFO).
„Heap“ reiškia didelį atminties telkinį, naudojamą dinaminiam atminties paskirstymui, tai reiškia, kad atmintis paskirstoma tol, kol programa bus baigta arba atmintis nebus atimta. Atmintis paskirstoma atsitiktine tvarka, todėl nėra lengvo būdo prieiti prie atminties. Skirtingai nuo kamino segmento, elementai išleidžiami atvirkštine tvarka, kaip jie buvo paskirstyti iš pradžių. Paprastai tariant, atmintis programoms skiriama paprašius ir išlaisvinama, kai jos nebereikia. Krūvos elementai yra nepriklausomi vienas nuo kito, tai reiškia, kad prie jų galima prisijungti, kai programa vykdoma, ir atlaisvinti pasibaigus programai. Tai tarsi globalus atminties fondas, naudojamas saugoti globalius kintamuosius ir daugelį kintamųjų, nurodančių jį.
Kompiuterio architektūroje rietuvė yra specialus kompiuterio atminties regionas, aiškiai skirtas automatiniams kintamiesiems. Programaujant, automatinis kintamasis yra vietinis kintamasis, reiškiantis, kad kintamojo apimtis yra lokali tam blokui, kuriame jis deklaruojamas. Įeinant į bloką, atmintis šiems kintamiesiems paskirstoma automatiškai, o išėjus - atmintis išlaisvinama. Kita vertus, krūva yra kompiuterio atminties dalis, naudojama dinaminei atminties paskirstymui, ty atminties blokai paskirstomi ir paskirstomi atsitiktine tvarka..
Stack yra naudojamas vietiniams kintamiesiems laikyti, kurių apimtis apibrėžta funkcijoje. Technine prasme stack palaiko statinės atminties paskirstymą, kuris atitinka vietinius statinius kintamuosius ir apimties kintamuosius. Atmintis skiriama prieš vykdant programą, paprastai kompiliavimo metu, o naudojama duomenų struktūra vadinama krūva. Kita vertus, krūva naudojama dinaminiam atminties paskirstymui, ty atmintis paskirstoma rankiniu būdu vykdant programą. Programos reikalauja atminties, paprastai norėdamos pridėti mazgą prie duomenų struktūros ir grąžina, jei to nereikia.
Rinkinį tvarko ir optimizuoja procesorius, o duomenys pasiekiami LIFO (paskutinis-pirmas-pirmas) tvarka. „LIFO“ susijęs su duomenų saugojimo atminties šūsnyje metodu, kuriame pirmiausia išlaisvinamas naujausias atminties blokas ir atvirkščiai. Tai leidžia efektyviai valdyti atmintį. Priešingai, krūvos elementai yra vienas nuo kito nepriklausomi ir prie duomenų galima prisijungti savavališkai, tai reiškia, kad atminties bloką galima paskirstyti ir išlaisvinti bet kuriuo metu, nepriklausomai nuo jų tvarkos. Priešingai nei krūvos, krūvos neturi apibrėžto atminties blokų paskirstymo ir paskirstymo modelio.
Atmintis yra valdoma automatiškai krūvoje, o kintamieji paskirstomi ir paskirstomi automatiškai, tai reiškia, kad krūva rezervuota tik laikiniems kintamiesiems. Vietiniai kintamieji tampa aktyvūs, kai funkcija vykdoma, o kai ji baigiasi, kintamieji išeina iš apimties, tai reiškia, kad kintamojo apimtis yra lokali funkcijai ir egzistuoja tol, kol ta funkcija vykdoma. Skirtingai nei kaminuose, atmintis paskirstoma, nes programa veikia krūvoje, todėl prieiga prie čia saugomų kintamųjų yra šiek tiek lėtesnė. Kadangi rezervavimo blokams nėra konkrečios tvarkos, atminties blokus galima bet kada skirti ir nemokamai.
Abu yra labiausiai paplitę atminties paskirstymo būdai ir saugomi kompiuterio RAM, kad būtų galima efektyviai valdyti atmintį. Tačiau prieiga prie rietuvės atminties yra greita, nes atmintis valdoma automatiškai, tuo tarpu, kai atmintis turi būti valdoma rankiniu būdu, tai reiškia, kad laisvą atmintį turite skirti patys, kai blokų nebereikia. Akivaizdu, kad „Stack“ yra greitesnis ir lengvesnis naudoti dėl savo lankstumo, tačiau turi nemažą privalumų ir trūkumų dalį. Nors krūva neriboja atminties dydžio, ją įgyvendinti yra šiek tiek sunku. Krūva yra lėtesnė nei krūva, tačiau ją įgyvendinti paprasčiau.