Mmap a malloc

Anonim

mmap vs malloc

V C je dynamická paměť, což ukazuje na přidělení paměti v programovacím jazyce C prostřednictvím množiny funkcí přítomných ve standardní knihovně C. Jedním z nich je malloc, který se týká přidělení paměti. V systémech UNIX existuje mmap, který se týká systému mapovaného paměti, který je dodáván s vlastním unikátním I / O. Tyto dva (mmap a malloc) budou mít při stejné hodnotě stejnou funkci, ale další kontrola odhalí některé rozdíly. Tyto rozdíly, které vyplývají z funkčnosti, jsou uvedeny níže.

Rozdíly

Nejprve je důležité zjistit, zda existuje nějaký důkaz naznačující, že je k dispozici značná ztráta paměti. To se provádí měřením výkonu programu a řízením paměti.

Rozhraním pro přidělení paměti je malloc. Toto je největší v knihovně C. Část řídícího kódu obsaženého v něm je mmap. Když běží malloc, shromažďuje všechna dostupná systémová zařízení. Další jádra systému mohou být mobilizována prostřednictvím jádra, což je jedna z strategií správy paměti, kterou systémy používají k zajištění dostatečné alokace paměti. Tento proces však není přímočarý a byl zkomplikován pouze proto, aby se zabránilo vytváření jednoduchých programů, které by mohly rozrušit přidělování paměti a tím i špatné výkony.

'Mmap' na druhé straně je systémové volání, které se načítá a požaduje, aby jádro nalezlo nevyužitou a souvislou oblast v adrese aplikace, která je dostatečně velká, aby umožnila mapování několika stránek paměti. Existuje také vytvoření struktury virtuální správy paměti, které ve skutečnosti nemohou mít za následek segfault.

Malloc obecně funguje ve většině procesů správy paměti. V případě, že program vyžaduje další paměť, je tato služba vypůjčena z operačního systému. Mmap na druhé straně využívá kontextového přepínače, který konvertuje do jádra.

Malloc je nejvhodnější pro přidělování paměti v libovolné aplikaci běžící na systému, na rozdíl od použití mmap. To je to, co se vyžaduje, aby se stalo ve výchozím nastavení, než ve zvláštních případech, kdy to může být povoleno.

Mmap lze použít k urychlení odezvy, kterou dávají aplikace. To se však nedoporučuje, protože končí obětováním některých bajtů na stránkách, takže aplikace může běžet hladce. Přestože obsah dat se může na začátku zdá být malý, extrapolací, když se řada aplikací chtějí spustit, může ve skutečnosti zpomalit systém ještě dále.

Po měření výkonnosti a využití zdrojů je třeba provést důkladné vyhodnocení využití dat všemi aplikacemi spuštěnými v systému. Pokud lze ukázat životnost běžících aplikací, může se stát lepší.

Použití mmap pro přidělování paměti má nevýhodu, že alokace a deallocation dat v kusech je drahá. Důvodem je to, že data jsou rozdělena do mnoha oblastí a také odmítá mmap z provádění systémových volání.

Mmap je výhodný v porovnání s malloc, protože paměť použitá pomocí mmap je okamžitě vrácena do operačního systému. Paměť, kterou používá malloc, se nikdy nevrací, pokud nedojde k přerušení datového segmentu. Tato paměť je speciálně uchována k opětovnému použití.

souhrn

'Malloc' znamená hlavní místo přidělení paměti

Systém mmap volá a požádá jádro, aby našel nepoužívané oblasti v aplikačních adresách, které umožňují mapování několika paměťových stránek

Mmap se nedoporučuje přidělit paměť, protože rozděluje dostupnou paměť a nemůže provádět systémová volání

Výhodou mmap nad mallocem je dostupnost paměti, na rozdíl od paměti malloc, která je znovu použita.