Klíčový rozdíl – statické a dynamické přidělování paměti
Při programování je nutné ukládat výpočetní data. Tato data jsou uložena v paměti. Paměťová místa pro ukládání dat v počítačovém programování jsou známá jako proměnné. Proměnné mají specifický datový typ. Paměť je proto přidělena ke spouštění programů. Paměť lze alokovat dvěma způsoby. Jsou to statické přidělování paměti a dynamické přidělování paměti. Ve statickém přidělování paměti, jakmile je paměť přidělena, nelze ji změnit. Paměť není znovu použitelná. Ale v dynamické alokaci paměti, jakmile je paměť přidělena, může být změněna. Klíčový rozdíl mezi statickou a dynamickou alokací paměti spočívá v tom, že při statické alokaci paměti, jakmile je paměť přidělena, je velikost paměti pevná, zatímco v dynamické alokaci paměti, jakmile je paměť přidělena, lze velikost paměti změnit.
Co je alokace statické paměti?
Při přidělování statické paměti je přidělená paměť pevná. Jakmile je paměť přidělena, nelze ji změnit. Paměť nelze zvětšit ani snížit. Například v jazyce C, pokud programátor napíše int x, což znamená, že proměnná může uložit celočíselnou hodnotu. Počet bajtů závisí na počítači. Mohou existovat také pole. Např. int x [5]; Toto x je pole, které může uložit sekvenci dat, která jsou stejného typu. Může uložit pět celočíselných prvků. Nemůže uložit více než pět prvků. V Javě lze pole vytvořit jako, int arr=new int[5]; Pole „arr“může uložit 5 celočíselných hodnot a nemůže uložit více než to.
Obrázek 01: Metody alokace paměti
Při přidělování statické paměti zůstávají proměnné, jakmile jsou přiděleny, trvalé. Po počátečním přidělení nemůže programátor změnit velikost paměti. Pokud programátor alokoval pole, které může uložit 10 prvků, není možné uložit hodnoty větší, než je zadané množství. Pokud programátor původně přidělil pole, které pojme 10 prvků, ale potřeboval pouze 5 prvků, dochází k plýtvání pamětí. Tato paměť již není potřeba, ale také není možné paměť znovu použít. Alokace statické paměti je pevná, ale implementace je jednoduchá a snadná a také rychlá.
Co je dynamické přidělování paměti?
Někdy je nutné změnit velikost paměti. Paměť lze tedy přidělovat dynamicky. V závislosti na vkládání a mazání datových prvků se může paměť zvětšovat nebo zmenšovat. Je známá jako dynamická alokace paměti.
V jazyce C, hlavičkový soubor stdlib.h, existují čtyři funkce pro dynamické přidělování paměti. Jsou to calloc, malloc, realloc a free. Funkce malloc() alokuje požadovanou velikost bajtů a vrací ukazatel void, ukazující na první bajt alokované paměti. Funkce calloc() alokuje požadovanou velikost bajtů a inicializuje je na nulu. Potom vrátí do paměti ukazatel prázdnoty. Funkce free() se používá k přerozdělení přidělené paměti. A funkce realloc může upravit dříve přidělenou paměť. Po alokaci paměti pomocí calloc nebo malloc je velikost paměti pevná, ale lze ji zvětšit nebo zmenšit pomocí funkce realloc. V Javě lze kolekce použít pro dynamickou alokaci paměti.
Hlavní výhodou dynamické alokace paměti je, že šetří paměť. Programátor může podle potřeby přidělit paměť nebo ji uvolnit. Paměť lze přerozdělit během provádění a může uvolnit paměť, když to není potřeba. Dynamické přidělování paměti je také efektivnější než přidělování statické paměti. Jednou nevýhodou je, že implementace dynamické alokace paměti je složitá.
Jaké jsou podobnosti mezi statickou a dynamickou alokací paměti?
- Oba jsou mechanismy alokace paměti.
- Obojí by měl programátor implementovat ručně.
Jaký je rozdíl mezi statickou a dynamickou alokací paměti?
Statická vs dynamická alokace paměti |
|
Statické přidělování paměti je způsob přidělování paměti a jakmile je paměť přidělena, je opravena. | Dynamické přidělování paměti je způsob přidělování paměti a jakmile je paměť přidělena, lze ji změnit. |
Úprava | |
Ve statické alokaci paměti není možné po počátečním přidělení změnit velikost. | Při dynamické alokaci paměti lze paměť odpovídajícím způsobem minimalizovat nebo maximalizovat. |
Implementace | |
Alokace statické paměti se snadno implementuje. | Implementace dynamické alokace paměti je složitá. |
Rychlost | |
Ve statické paměti je provádění alokace rychlejší než dynamické alokování paměti. | V dynamické paměti je provádění alokace pomalejší než alokace statické paměti. |
Využití paměti | |
Při přidělování statické paměti nelze nevyužitou paměť znovu použít. | Dynamické přidělování paměti umožňuje opětovné použití paměti. V případě potřeby může programátor přidělit více paměti. V případě potřeby může uvolnit paměť. |
Shrnutí – statické vs dynamické přidělování paměti
V programování jsou statické přidělování paměti a dynamické přidělování paměti dva mechanismy pro přidělování paměti. Rozdíl mezi statickou a dynamickou alokací paměti je v tom, že při statické alokaci paměti, jakmile je paměť přidělena, je velikost paměti pevná, zatímco v dynamické alokaci paměti, jakmile je paměť přidělena, lze velikost paměti změnit. Programátor se může rozhodnout, zda má být paměť statická nebo dynamická v závislosti na aplikaci.
Stáhněte si PDF alokace statické vs dynamické paměti
Můžete si stáhnout PDF verzi tohoto článku a použít ji pro offline účely podle citace. Stáhněte si prosím PDF verzi zde: Rozdíl mezi statickou a dynamickou alokací paměti