Atmiņas pārvaldība ir operētājsistēmas būtiska parādība, ko izmanto, lai apstrādātu vai pārvaldītu primāro atmiņu, lai kontrolētu atmiņas piekļuves tiesības datorā. Mērķis ir neļaut jebkuram procesam piekļūt atmiņai, kas tam vēl nav piešķirta.
Operētājsistēma katram procesam piešķir atmiņu, kas ir sadalīta segmentos. Stack un Heap ir divi veidi, kā operētājsistēmā tiek piešķirta atmiņa.
Skursteņu segments tiek izmantots, lai saglabātu automātiski izveidotos vietējos funkciju mainīgos, savukārt kaudzes segments tiek izmantots dinamiski iedalītai atmiņai.
Abas tiek glabātas datora operatīvajā atmiņā, un programmas izpildes laikā tās var augt un sarukt. Detalizēti pārrunāsim divus un salīdzināsim tos, lai saprastu, kurš no tiem ir labāks.
Steka segments ir atmiņas pārvaldības paņēmiens, ko izmanto statiskās atmiņas sadalīšanai. Tā ir īpaša vieta datora atmiņā, kuru izmanto vietējo funkciju mainīgo glabāšanai. Kad tiek izsaukta funkcija, visiem vietējiem mainīgajiem tiek atvēlēta atmiņa, un šiem mainīgajiem var piekļūt, jo zināt to atrašanās vietas. Atmiņas bloki tiek atbrīvoti, kad funkcija tiek pārtraukta. Stack ir viens no veidiem, kā efektīvi ieviest šo procesu. Padomājiet par to kā pamata datu struktūru, kur vienumi ir izvietoti viens virs otra kā kaudze. Līdzīgi vietējiem mainīgajiem var piekļūt ar stumšanu un popping. Stumšana attiecas uz priekšmetu pievienošanu kaudzītei, un popping nozīmē to iegūšanu no kaudzītes. Vienumiem var piekļūt no kaudzītes secībā “pēdējais-pirmais-ārā” (LIFO).
Kaudzes attiecas uz lielu atmiņas kopu, ko izmanto dinamiskai atmiņas sadalei, kas nozīmē, ka atmiņa tiek piešķirta, līdz programma tiek pārtraukta vai atmiņa tiek atbrīvota. Atmiņa tiek piešķirta pēc nejaušības principa, tāpēc nav viegli piekļūt atmiņai. Atšķirībā no steka segmenta, elementi tiek atbrīvoti apgrieztā secībā, kā tie sākotnēji tika piešķirti. Vienkārši izsakoties, atmiņu programmām piešķir pēc pieprasījuma un atbrīvo pēc tam, kad tā vairs nav nepieciešama. Kaudzes elementi ir neatkarīgi viens no otra, tas nozīmē, ka tiem var piekļūt, kad programma darbojas, un atbrīvot tos, kad programma tiek pārtraukta. Tas ir kā globālais atmiņas fonds, ko izmanto, lai glabātu globālos mainīgos un daudzus mainīgos, kas uz to atsaucas.
Datoru arhitektūrā kaudze ir īpašs datora atmiņas apgabals, kas skaidri paredzēts automātiskajiem mainīgajiem. Programmēšanā automātiskais mainīgais ir lokāls mainīgais, kas nozīmē, ka mainīgā darbības joma ir lokāla tajā blokā, kurā tas tiek deklarēts. Atmiņa tiek automātiski piešķirta šiem mainīgajiem pēc ieiešanas blokā, un atmiņa tiek atbrīvota, izejot no tā. Kaudze, no otras puses, ir datora atmiņas daļa, ko izmanto dinamiskās atmiņas sadalīšanai, kas nozīmē, ka atmiņas bloki tiek sadalīti un sadalīti nejauši.
Stack tiek izmantots, lai saglabātu vietējos mainīgos, kuru darbības joma ir definēta funkcijā. Tehniskā ziņā kaudze atbalsta statiskās atmiņas piešķiršanu, kas atbilst vietējiem statiskajiem mainīgajiem un darbības jomas mainīgajiem. Atmiņa tiek piešķirta pirms programmas izpildes, parasti kompilēšanas laikā, un izmantoto datu struktūru sauc par steku. Savukārt kaudze tiek izmantota dinamiskai atmiņas sadalei, kas nozīmē, ka atmiņa tiek manuāli piešķirta izpildes laikā programmas izpildes laikā. Programmas pieprasa atmiņu, parasti mezgla pievienošanai datu struktūrai un atgriešanos, ja tas nav nepieciešams.
Paketi pārvalda un optimizē centrālais procesors, un datiem piekļūst LIFO (pēdējais pirmais-pirmais-ārā) secībā. LIFO attiecas uz datu glabāšanas metodi atmiņas kaudzēs, kurās pirmais tiek atbrīvots pēdējais atmiņas bloks, un otrādi. Tas nodrošina efektīvu atmiņas pārvaldību. Kaudzes elementi, gluži pretēji, ir neatkarīgi viens no otra, un datiem var piekļūt patvaļīgi, tas nozīmē, ka atmiņas bloku var piešķirt un atbrīvot jebkurā laikā neatkarīgi no to secības. Atšķirībā no skursteņiem kaudzēm nav noteikta modeļa atmiņas bloku piešķiršanai un izvietošanai.
Atmiņa tiek pārvaldīta automātiski kaudzē, un mainīgie tiek automātiski sadalīti un sadalīti, kas nozīmē, ka kaudze tiek rezervēta tikai pagaidu mainīgajiem. Vietējie mainīgie kļūst aktīvi, kad funkcija tiek izpildīta, un kad tā beidzas, mainīgie iziet no darbības jomas, kas nozīmē, ka mainīgā darbības joma ir lokāla funkcijai un pastāv tik ilgi, kamēr šī funkcija tiek izpildīta. Atšķirībā no steka, atmiņa tiek piešķirta, jo programma darbojas kaudzē, kas padara nedaudz lēnāku piekļuvi šeit glabātajiem mainīgajiem. Tā kā bloku rezervēšanā nav noteiktas kārtības, atmiņas blokus var piešķirt un atbrīvot jebkurā laikā.
Abi ir visizplatītākie atmiņas piešķiršanas veidi, un tie tiek glabāti datora RAM, lai efektīvi pārvaldītu atmiņu. Piekļuve kaudzē esošajai atmiņai ir ātra, jo atmiņa tiek pārvaldīta automātiski, turpretī kaudzē atmiņa ir jāpārvalda manuāli, tas nozīmē, ka jums pašiem ir jāpiešķir brīvā atmiņa, kad bloki vairs nav nepieciešami. Stack acīmredzami ir ātrāks un vieglāk lietojams, pateicoties tā elastīgumam, taču tam ir diezgan liela plusi un mīnusi. Lai arī kaudzei nav ierobežota atmiņas lieluma, to ir grūti ieviest. Kaudze ir lēnāka nekā kaudze, taču tās ieviešana ir vienkāršāka.