Dynamická alokace pamětiDynamická alokace paměti je v informatice označení pro rezervaci části operační paměti za běhu počítačového programu. Operační paměť spravuje v počítači část jádra nazývaná správce paměti (anglicky memory manager). Většina operačních systémů umožňuje paměť za běhu programu nejen alokovat (tj. proces nebo thread paměť od systému získá pro svoji potřebu), ale i vracet (proces vrací nepotřebnou paměť systému, aby mohla být později opět přidělena). U dynamické alokace nemusí být při překladu programu známá velikost potřebné části paměti pro ukládaná data (na rozdíl od statické alokace paměti). Výhody a nevýhodyStaticky alokovaná paměť je výhodná z hlediska rychlosti přístupu k uloženým datům. V určitých případech je ale nevýhodná z hlediska neefektivnosti manipulace s datovým prostorem. Představme si program, který setřídí zadané řetězce (slova, věty) podle abecedy. Není známo, kolik řetězců bude zadáno ani jejich velikost. Bylo by možné vytvořit pole o takovém počtu a velikosti položek, které s největší pravděpodobností nebude překročeno, například 500 položek o velikosti 128 bytů. Alokovaná paměť je statická, a proto se bude za běhu programu pracovat s celým polem, což zpomalí výpočet a zabere zbytečně mnoho paměťového prostoru. Možnosti, že bude potřeba setřídit 501 položek nebo že položka bude o něco větší, nejsou nijak ošetřeny. Výhodou dynamicky alokované paměti je možnost kdykoliv uvolnit již zabraný paměťový prostor, což zvyšuje rychlost samotného programu i přes zvýšené datové nároky. Vytváření dynamických proměnných v paměti je však časově náročnější než u statických, a proto může při neuváženém používání takových struktur docházet ke zpomalení celé aplikace. Životní cyklusVýše zmíněné dva způsoby manipulace s paměťovým prostorem se liší mezi jinými i v délce existence. Zatímco paměť alokovaná staticky je uvolněna po přesně stanovené době, dynamicky alokovanou paměť musí uvolnit sám program nebo příslušný garbage collector. Dynamicky alokovaná paměť má tedy též dynamickou dobu existence. Halda a ukazatelOznačení halda je ve svém původním významu (jak začalo být používáno v roce 1975) označení pro veškerou dostupnou paměť. Dnes je ale používáno k označení části paměti, která je využívána pro alokaci dynamické paměti (resp. dynamických proměnných). Protože předem není známo, kolik paměti bude potřeba, nemůže být datový prostor adresován přímo, nýbrž pomocí takzvaných ukazatelů (anglicky pointer). Ukazatele uchovávají adresu začátku alokované paměti: Například v případě pole ukazují na jeho první prvek, tedy na hodnotu s indexem nula. Programovací jazyky a dynamická alokace pamětiUkazatele v hojné míře využívají programátoři pracující v jazyce C, C++ a Pascalu. Ne všechny programovací jazyky umožňují používat ukazatele a nahrazují je referencemi na objekt (Python, Visual Basic .NET, Java apod.). Děje se tak proto, aby programátor nemohl pracovat přímo s adresami paměti a vyvaroval se tak zbytečných chyb. Programovací jazyk C Podrobnější informace naleznete v článku Dynamická alokace paměti v jazyce C.
Pro získání a uvolnění paměti jsou používány funkce void *malloc(size_t size);
Funkce void free(void *ptr);
Funkce void *calloc(size_t num, size_t size);
Funkce void *realloc(void *ptr, size_t size);
Funkce Externí odkazy |