2.2. Problémy správy paměti
Základním problémem správy paměti je správné rozhodnutí o tom, zda je v nějakém
úseku paměti třeba ponechat data, která obsahuje, případně zda je možné tato
data zahodit a úsek paměti znovu využít pro jiné účely. Ačkoliv to zní jednoduše,
jedná se o obtížný problém, jemuž se věnuje samostatná oblast výzkumu. V ideálním
případě by se programátor neměl o správu paměti vůbec zajímat. Existuje však
naneštěstí mnoho možností, jak může špatné spravování paměti ovlivnit
robustnost a rychlost programů, a to jak při manuální, tak i při automatické
správě paměti. Mezi typické problémy patří:
- Předčasné uvolnění paměti. Mnoho programů uvolní
paměť, avšak pokouší se k ní přistupovat později, což může být příčinou
havárie nebo neočekávaného chování programu. Tento problém nastává obvykle
při manuální správě paměti.
- Únik paměti. K úniku paměti dochází tehdy,
pokud program neustále přiděluje novou paměť, aniž by ji zase uvolňoval.
To může vést až k havárii programu v důsledku vyčerpání dostupné volné
paměti.
- Externí fragmentace. Špatně navržená metoda
přidělování paměti může vést k tomu, že nelze přidělit dostatečně
velký blok volné paměti, i když celkové množství volné paměti je větší.
Tato situace vzniká tehdy, pokud je volná paměť rozdělena na mnoho malých
bloků, mezi nimiž jsou stále používané bloky, a nazývá se externí
fragmentací.
- Špatná lokalita odkazů. Další problém
se strukturou přidělených bloků vychází z toho, jak moderní procesory a
operační systémy pracují s pamětí. Přístupy k paměti jsou rychlejší, pokud
pracujeme s ne příliš od sebe vzdálenými místy. Pokud správa paměti
umístí bloky, k nimž program přistupuje současně, daleko od sebe, může
to vést ke zhoršení výkonu programu.
- Nepřizpůsobivý návrh. Další problémy s výkonem
programu mohou nastat tehdy, pokud metoda přidělování paměti předem
předpokládá jisté vlastnosti programu, například typickou velikost
bloků, posloupnost odkazů nebo dobu života přidělovaných objektů. Nejsou-li
tyto předpoklady splněny, může se celková režie správy paměti zvýšit.
Dobře navržená správa paměti může zjednodušit psaní ladicích nástrojů. Takové
nástroje mohou zobrazovat objekty, přesouvat se mezi odkazy nebo detekovat
neočekávané nahromadění jistých typů bloků nebo jejich velikostí.