Dynamická alokace paměti

Dynamické přidělování paměti  je metoda přidělování počítačové paměti RAM pro objekty v programu, ve které se přidělování paměti pro objekt provádí během provádění programu .

Při dynamické alokaci paměti se objekty umísťují do tzv. „ halda “ ( angl.  heap ): při konstrukci objektu je indikována velikost paměti požadované pro objekt a v případě úspěchu je alokovaná paměťová oblast relativně řečeno „odstraněna“ z „ haldy “, čímž se stává nepřístupné během následujících operací alokace paměti. Operace, která má opačný význam, je uvolnění paměti dříve obsazené nějakým objektem: uvolněná paměť, také podmíněně řečeno, je vrácena na " hromadu " a je k dispozici během dalších operací přidělování paměti.

Jak jsou v programu vytvářeny nové objekty, množství dostupné paměti se zmenšuje. Z toho plyne potřeba neustále uvolňovat dříve přidělenou paměť. V ideálním případě by měl program zcela uvolnit veškerou paměť, která byla pro práci potřebná. Analogicky k tomu musí každý podprogram ( procedura nebo funkce ) zajistit uvolnění veškeré paměti přidělené během jeho provádění. Nesprávná správa paměti vede k tzv. „ úniky “ paměti, když není uvolněná alokovaná paměť. Vícenásobné úniky paměti mohou vyčerpat veškerou paměť RAM a narušit operační systém.

Dalším problémem je problém fragmentace paměti. Alokace paměti probíhá v blocích - souvislých fragmentech RAM (tedy každý blok má několik po sobě jdoucích bajtů ). V určitém okamžiku halda jednoduše nemusí mít blok vhodné velikosti, a i když je dostatek volné paměti pro umístění objektu, operace alokace paměti selže.

Pro správu dynamické alokace paměti slouží „garbage collector“ – programový objekt, který hlídá alokaci paměti a zajišťuje její včasné uvolnění. Garbage collector také zajišťuje, že volné bloky mají maximální velikost, a v případě potřeby defragmentuje paměť.

Implementační prvky

Programovací jazyk C (C)

Programovací jazyk C má ve standardní knihovně následující funkce pro dynamickou alokaci paměti :

Programovací jazyk C++

C ++ má dva operátory:

Programovací jazyk Object Pascal

Object Pascal má dva operátory:

Viz také

Zdroje