Mmap i malloc

Anonim

mmap vs malloc

W pamięci C znajduje się pamięć dynamiczna, która wskazuje na przydział pamięci w języku programowania C poprzez zestaw funkcji obecnych w bibliotece standardowej C. Jednym z nich jest malloc, który odnosi się do alokacji pamięci. W systemie UNIX istnieje mmap, który odnosi się do systemu odwzorowanego w pamięci, który ma własne unikalne operacje wejścia / wyjścia. Te dwie wartości (mmap i malloc) będą miały tę samą funkcję, ale dalsza analiza ujawnia pewne różnice. Różnice te, wynikające z funkcjonalności, zostały przedstawione poniżej.

Różnice

Po pierwsze, ważne jest ustalenie, czy istnieją jakiekolwiek dowody wskazujące na znaczne stłumienie dostępnej pamięci. Odbywa się to poprzez pomiar wydajności programu w stosunku do zarządzania pamięcią.

Głównym interfejsem alokacji pamięci jest malloc. Jest to największa biblioteka C. Częścią zawartego w nim kodu zarządzania jest mmap. Kiedy malloc jest uruchomiony, gromadzi wszystkie dostępne urządzenia systemowe. Dodatkowe urządzenia systemowe można zmobilizować za pośrednictwem jądra, które jest jedną ze strategii zarządzania pamięcią wykorzystywaną przez systemy w celu zapewnienia zadowalającego przydziału pamięci. Proces ten nie jest jednak prosty i został skomplikowany wyłącznie z powodu zapobiegania tworzeniu prostych programów, które mogą dezorganizować alokację pamięci, a tym samym powodować niską wydajność.

"Mmap" z drugiej strony jest wywołaniem systemowym, które pobiera opłatę i żąda od jądra, aby znalazł nieużywany i ciągły region w adresie aplikacji, który jest wystarczająco duży, aby umożliwić mapowanie kilku stron pamięci. Istnieje również tworzenie struktur zarządzania pamięcią wirtualną, które w efekcie nie mogą prowadzić do awarii.

Malloc zasadniczo działa w większości procesów zarządzania pamięcią. Jeśli program wymaga dodatkowej pamięci, jest to zapożyczone z systemu operacyjnego. Z kolei Mmap korzysta z przełącznika kontekstowego, który przekształca się w krainę jądra.

Malloc najlepiej nadaje się do przydzielania pamięci w dowolnej aplikacji uruchomionej w systemie, w przeciwieństwie do używania mmap. Jest to wymagane domyślnie, inne niż w szczególnych przypadkach, gdy jest to dozwolone.

Mmap może być użyty do przyspieszenia odpowiedzi udzielanej przez aplikacje. Nie jest to jednak zalecane, ponieważ kończy się poświęcanie niektórych bajtów na strony, aby aplikacja działała płynnie. Chociaż zawartość danych może wydawać się na początku niewielka, ekstrapolacja, gdy wiele aplikacji chce działać, może w efekcie spowolnić system jeszcze bardziej.

Po zmierzeniu wydajności i wykorzystania zasobów należy przeprowadzić dokładną ocenę wykorzystania danych przez wszystkie aplikacje uruchomione w systemie. Jeśli można wyświetlać okresy życia uruchomionych aplikacji, może się poprawić.

Użycie mmap do przydzielania pamięci ma tę wadę, że alokacja i deallokacja danych w porcjach jest kosztowna. Dzieje się tak dlatego, że dane są dzielone na wiele obszarów, a także odmawiają mmapowi wykonywania wywołań systemowych.

Mmap jest korzystniejszy niż malloc, ponieważ pamięć zużywana przez mmap jest natychmiast zwracana do systemu operacyjnego. Pamięć zużywana przez malloc nie jest zwracana, chyba że wystąpi przerwa segmentu danych. Ta pamięć jest specjalnie przechowywana do ponownego wykorzystania.

streszczenie

"Malloc" oznacza główny punkt alokacji pamięci

System mmap wywołuje i żąda jądra, aby znaleźć nieużywane regiony w adresach aplikacji, które mogą pomieścić kilka stron pamięci

Mmap nie jest zalecany do przydzielania pamięci, ponieważ dzieli ona dostępną pamięć i nie może wykonywać wywołań systemowych

Zaletą mmap w porównaniu z malloc jest dostępność pamięci, w przeciwieństwie do pamięci malloc, która jest ponownie wykorzystywana.