Omejitve in težave upravljanja s pomnilnikom

Upravljanje s pomnilnikom lahko zahteva veliko virov. V splošnem je upravljalec pomnilnika omejen z naslednjim:

  • skupno uporabo CPE (CPE overhead) - pomeni dodatno obremenitev CPE-ja kot osnovnega računalniškega vira zaradi samega upravljanja s pomnilnikom;
  • časovne zakasnitve (interactive pause times) - kako upravljanje s pomnilnikom občuti interaktivni uporabnik v obliki zakasnitev;
  • skupna uporaba pomnilnika (memory overhead)  - koliko pomnilnika se izgubi zaradi samega upravljanja s pomnilnikom; v splošnem se tu srečujemo z zunanjo in/ali notranjo fragmentacijo - obe težavi sta opisani v poglavju Navidezni pomnilnik.

Osnovna težava upravljanja s pomnilnikom je dilema ali je potrebno podatke v rezerviranem delu pomnilnika še hraniti ali pa se jih lahko zavrže z namenom ponovne uporabe pomnilniškega prostora. V idealnih razmerah se programerjem ne bi sploh bilo potrebno ukvarjati z upravljanjem pomnilnika, v resničnem svetu pa prihaja do številnih težav.

Prezgodnje sproščanje ali neobstoječi kazalci

Veliko programov hitro sprosti določene dele pomnilnika, vendar kasneje želi dostopati do vsebin, kar ponavadi pripelje do sesutja programa. Pojav je znan kot prezgodnje sproščanje, kazalec na neobstoječe vsebine pa imenujemo nestabilen kazalec (dangling pointer). Pojav običajno srečujemo pri programih z ročnim upravljanjem s pomnilnikom.

Puščanje pomnilnika (Memory leak)

Napačno sprogramirani programi vedno le alocirajo pomnilnik, nikoli pa ga ne sprostijo in tako s časoma ostanejo brez pomnilnika. Ta pojav imenujemo puščanje pomnilnika (memory leak).

Zunanja fragmentacija

Slab alokator lahko pomnilnik razdeljuje tako, da s časoma ne more več ustreči zahtevi po večjem bloku. Pomnilnik postane "luknjast" - imamo veliko prostega prostora vendar je ta razseljen po vsem pomnilniškem prostoru. Pojav imenujemo zunanja fragmentacija.

Slaba lokalnost naslavljanja (locality of reference) 

Moderni sistemi dostopajo hitreje do lokacij blizu obstoječe kot do lokacij, ki so od trenutne bolj oddaljene. Če se s pomnilnikom upravlja tako, da so bloki, ki se uporabljajo skupaj preveč narazen pride do zmanjšanja performans program. Pojav imenujemo slaba lokalnost naslavljanja.

Neprilagodljiva zasnova (inflexible design) 

Če je upravljalec pomnilnika slabo zasnovan oziroma zasnovan za drugačno rabo od dejanske lahko pričakujemo slabo upravljanje pomnilnika v smislu performans. Slaba zasnova pomeni slabo oceno o velikostih blokov, načinih uporabe pomnilnika, življenski dobi objektov ipd.
 
Kompleksnost vmesnika
 
Če se objekti programa prenašajo iz enega modula v drugi, potem je potrebno to upoštevati tudi pri upravljanju pomnilnika za te objekte.