Kľúčový rozdiel – prideľovanie statickej a dynamickej pamäte
Pri programovaní je potrebné ukladať výpočtové dáta. Tieto údaje sú uložené v pamäti. Pamäťové miesta na ukladanie údajov v počítačovom programovaní sú známe ako premenné. Premenné majú špecifický dátový typ. Preto je pamäť pridelená na spustenie programov. Pamäť je možné alokovať dvoma spôsobmi. Sú to statické prideľovanie pamäte a dynamické prideľovanie pamäte. Pri statickom prideľovaní pamäte sa po pridelení pamäte nedá zmeniť. Pamäť nie je opätovne použiteľná. Ale pri dynamickom prideľovaní pamäte je možné pamäť po pridelení zmeniť. Kľúčový rozdiel medzi statickou a dynamickou alokáciou pamäte je v tom, že pri statickej alokácii pamäte po pridelení pamäte je veľkosť pamäte pevná, zatiaľ čo pri dynamickom prideľovaní pamäte je možné po pridelení pamäte veľkosť pamäte zmeniť.
Čo je prideľovanie statickej pamäte?
Pri prideľovaní statickej pamäte je pridelená pamäť pevná. Akonáhle je pamäť pridelená, nie je možné ju zmeniť. Pamäť sa nedá zväčšiť ani zmenšiť. Napríklad v jazyku C, ak programátor napíše int x, čo znamená, že premenná môže uchovávať celočíselné hodnoty. Počet bajtov závisí od počítača. Môžu existovať aj polia. napr. int x [5]; Toto x je pole, ktoré môže uchovávať sekvenciu údajov rovnakého typu. Môže uložiť päť celočíselných prvkov. Nemôže uložiť viac ako päť prvkov. V Jave môže byť pole vytvorené ako, int arr=new int[5]; Pole „arr“môže uložiť 5 celočíselných hodnôt a nemôže uložiť viac ako toto.
Obrázok 01: Metódy prideľovania pamäte
Pri prideľovaní statickej pamäte, akonáhle sú premenné pridelené, zostanú trvalé. Po počiatočnom pridelení nemôže programátor zmeniť veľkosť pamäte. Ak programátor pridelil pole, do ktorého je možné uložiť 10 prvkov, nie je možné uložiť viac hodnôt, ako je uvedené množstvo. Ak programátor pôvodne pridelil pole, ktoré môže obsahovať 10 prvkov, ale potreboval iba 5 prvkov, dochádza k plytvaniu pamäťou. Táto pamäť už nie je potrebná, ale nie je možné ju znova použiť. Prideľovanie statickej pamäte je pevné, ale implementácia je jednoduchá a ľahká a tiež rýchla.
Čo je dynamické prideľovanie pamäte?
Niekedy je potrebné zmeniť veľkosť pamäte. Pamäť je teda možné prideľovať dynamicky. V závislosti od vloženia a vymazania dátových prvkov môže pamäť rásť alebo sa zmenšovať. Je to známe ako dynamické prideľovanie pamäte.
V jazyku C, hlavičkovom súbore stdlib.h, existujú štyri funkcie na dynamické prideľovanie pamäte. Sú to calloc, malloc, realloc a free. Funkcia malloc() pridelí požadovanú veľkosť bajtov a vráti ukazovateľ void, ktorý ukazuje na prvý bajt pridelenej pamäte. Funkcia calloc() alokuje požadovanú veľkosť bajtov a inicializuje ich na nulu. Potom vráti ukazovateľ neplatnosti do pamäte. Funkcia free() sa používa na prerozdelenie pridelenej pamäte. A funkcia realloc môže upraviť predtým pridelenú pamäť. Po pridelení pamäte pomocou calloc alebo malloc je veľkosť pamäte pevná, ale možno ju zväčšiť alebo zmenšiť pomocou funkcie realloc. V jazyku Java možno kolekcie použiť na dynamické prideľovanie pamäte.
Hlavnou výhodou dynamického prideľovania pamäte je, že šetrí pamäť. Programátor môže podľa potreby prideliť alebo uvoľniť pamäť. Pamäť môže byť prerozdelená počas vykonávania a môže uvoľniť pamäť, keď to nie je potrebné. Dynamické prideľovanie pamäte je tiež efektívne ako statické prideľovanie pamäte. Jednou nevýhodou je, že implementácia dynamickej alokácie pamäte je zložitá.
Aké sú podobnosti medzi statickou a dynamickou alokáciou pamäte?
- Obaja sú mechanizmy prideľovania pamäte.
- Oboje by mal programátor implementovať ručne.
Aký je rozdiel medzi prideľovaním statickej a dynamickej pamäte?
Statická vs dynamická alokácia pamäte |
|
Statická alokácia pamäte je spôsob prideľovania pamäte a akonáhle je pamäť pridelená, je pevná. | Dynamické prideľovanie pamäte je spôsob prideľovania pamäte a po pridelení pamäte ju možno zmeniť. |
Úprava | |
Pri prideľovaní statickej pamäte nie je možné po počiatočnom pridelení zmeniť veľkosť. | Pri dynamickom prideľovaní pamäte je možné pamäť zodpovedajúcim spôsobom minimalizovať alebo maximalizovať. |
Implementácia | |
Alokácia statickej pamäte je jednoduchá na implementáciu. | Dynamické prideľovanie pamäte je zložité na implementáciu. |
Rýchlosť | |
V statickej pamäti je vykonanie prideľovania rýchlejšie ako dynamické prideľovanie pamäte. | V dynamickej pamäti je vykonávanie pridelenia pomalšie ako pri prideľovaní statickej pamäte. |
Využitie pamäte | |
Pri prideľovaní statickej pamäte nie je možné opätovne použiť nevyužitú pamäť. | Dynamické prideľovanie pamäte umožňuje opätovné použitie pamäte. V prípade potreby môže programátor prideliť viac pamäte. V prípade potreby môže uvoľniť pamäť. |
Súhrn – statické vs dynamické prideľovanie pamäte
Pri programovaní sú statické prideľovanie pamäte a dynamické prideľovanie pamäte dva mechanizmy na prideľovanie pamäte. Rozdiel medzi statickou a dynamickou alokáciou pamäte je v tom, že pri statickej alokácii pamäte po pridelení pamäte je veľkosť pamäte pevná, zatiaľ čo pri dynamickom prideľovaní pamäte po pridelení pamäte je možné veľkosť pamäte zmeniť. Programátor sa môže rozhodnúť, či má byť pamäť statická alebo dynamická v závislosti od aplikácie.
Stiahnite si súbor PDF o prideľovaní statickej vs dynamickej pamäte
Verziu tohto článku si môžete stiahnuť vo formáte PDF a použiť ju na offline účely podľa citácie. Stiahnite si verziu PDF tu: Rozdiel medzi statickou a dynamickou alokáciou pamäte