Fond paměti - Memory pool
![]() | Tento článek obsahuje a seznam doporučení, související čtení nebo externí odkazy, ale jeho zdroje zůstávají nejasné, protože mu chybí vložené citace.Červen 2014) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Paměťové fondy, také zvaný alokace bloků pevné velikosti, je použití bazény pro správa paměti to umožňuje dynamická alokace paměti srovnatelné s malloc nebo C ++ je operátor nový. Jak tyto implementace trpí fragmentace z důvodu proměnných velikostí bloků se nedoporučuje používat je v a systém v reálném čase kvůli výkonu. Efektivnějším řešením je předběžné přidělení řady paměťových bloků stejné velikosti, které se říká fond paměti. Aplikace může přidělit, přistupovat a volné bloky reprezentované rukojeti na doba běhu.
Mnoho operační systémy v reálném čase používat fondy paměti, například Zařízení pro zpracování transakcí.
Některé systémy, například webový server Nginx, použijte výraz fond paměti odkazovat na skupinu alokací proměnné velikosti, které lze později uvolnit najednou. Toto se také nazývá a kraj; vidět správa paměti podle regionu.
Jednoduchá implementace fondu paměti
Jednoduchý modul fondu paměti může přidělit například tři fondy na čas kompilace s velikostí bloků optimalizovaných pro aplikaci nasazující modul. Aplikace může přidělit, přistupovat a uvolňovat paměť prostřednictvím následujícího rozhraní:
- Přidělte paměť z fondů. Funkce určí fond, do kterého se požadovaný blok vejde. Pokud jsou všechny bloky tohoto fondu již rezervovány, funkce se pokusí najít jeden v příštích větších fondech. Přidělený blok paměti je reprezentován a Rukojeť.
- Získejte přístupový ukazatel k přidělené paměti.
- Uvolněte dříve přidělený blok paměti.
- Rukojeť může být například implementována pomocí
nepodepsané int
. Modul může interně interpretovat popisovač rozdělením na index fondu, index paměťového bloku a verzi. Index fondu a paměťového bloku umožňuje rychlý přístup k odpovídajícímu bloku s popisovačem, zatímco verze, která se zvyšuje při každé nové alokaci, umožňuje detekci popisovačů, jejichž blok paměti je již uvolněn (způsobený příliš dlouhým uchováním popisovačů).
Paměťový fond vs malloc
Výhody
- Fondy paměti umožňují přidělení paměti s konstantní dobou provedení. Uvolnění paměti pro tisíce objektů ve fondu je pouze jedna operace, nikoli jedna po druhé, pokud malloc se používá k přidělení paměti pro každý objekt.
- Fondy paměti lze seskupit do hierarchických stromových struktur, což je vhodné pro speciální programovací struktury, jako je smyčky a rekurze.
- Fondy paměti bloků pevné velikosti nemusí ukládat metadata alokace pro každou alokaci, popisující charakteristiky, jako je velikost alokovaného bloku. To zejména u malých alokací poskytuje značné úspory prostoru.
- Umožňuje deterministické chování v systémech v reálném čase, aby nedocházelo k chybám z nedostatku paměti.
Nevýhody
- Možná bude nutné naladit paměťové oblasti pro aplikaci, která je nasadí.