mmap vs malloc
W C istnieje pamięć dynamiczna, co wskazuje na przydział pamięci w języku programowania C poprzez zestaw funkcji obecnych w standardowej bibliotece 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 we / wy. Te dwa (mmap i malloc) będą według wartości nominalnej pełnić tę samą funkcję, ale dalsza analiza ujawni pewne różnice. Różnice wynikające z funkcjonalności przedstawiono poniżej.
Różnice
Po pierwsze, ważne jest ustalenie, czy istnieją dowody wskazujące na znaczące tłumienie dostępnej pamięci. Odbywa się to poprzez pomiar wydajności programu względem zarządzania pamięcią .
Głównym interfejsem alokacji pamięci jest malloc. Jest to największy w bibliotece C. Część zawartego w nim kodu zarządzania to mmap. Gdy Malloc jest uruchomiony, gromadzi wszystkie dostępne funkcje systemowe. Dodatkowe funkcje systemu można zmobilizować za pośrednictwem jądra, które jest jedną ze strategii zarządzania pamięcią używanych przez systemy w celu zapewnienia zadowalającej alokacji pamięci. Proces ten nie jest jednak prosty i został skomplikowany wyłącznie z tego powodu, że uniemożliwia ludziom tworzenie prostych programów, które mogą dezorganizować przydział pamięci, a tym samym powodować niską wydajność.
Z drugiej strony „mmap” to wywołanie systemowe, które przejmuje kontrolę i prosi jądro o znalezienie nieużywanego i ciągłego regionu 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ą doprowadzić do awarii.
Malloc ogólnie działa w większości procesów zarządzania pamięcią. W przypadku, gdy program wymaga dodatkowej pamięci, jest ona zapożyczona z systemu operacyjnego. Z kolei Mmap korzysta z przełącznika kontekstu, który przekształca się w jądro jądra.
Malloc najlepiej nadaje się do przydzielania pamięci w dowolnej aplikacji działającej w systemie, w przeciwieństwie do korzystania z mmap. To jest wymagane, aby stało się to domyślnie, z wyjątkiem szczególnych przypadków, gdy może to być dozwolone.
Mmap może być użyty do przyspieszenia reakcji aplikacji. Nie jest to jednak wskazane, ponieważ kończy się poświęcanie niektórych bajtów stronom, aby aplikacja mogła działać płynnie. Chociaż na początku zawartość danych może wydawać się niewielka, ekstrapolacja jej, gdy chce się uruchomić wiele aplikacji, może jeszcze bardziej spowolnić system.
Po zmierzeniu wydajności i zużycia zasobów należy dokonać dokładnej oceny wykorzystania danych przez wszystkie aplikacje uruchomione w systemie. Jeśli czas życia uruchomionych aplikacji może być pokazany, może być lepszy.
Korzystanie z mmap do przydzielania pamięci ma tę wadę, że przydzielanie i zwalnianie danych w porcjach jest kosztowne. Wynika to z faktu, że dane są podzielone na wiele obszarów, a także odmawia mmap wykonywania połączeń systemowych.
Mmap ma przewagę nad malloc, ponieważ pamięć zużyta przez mmap jest natychmiast zwracana do systemu operacyjnego. Pamięć zużyta przez malloc nigdy nie jest zwracana, chyba że nastąpi przerwa w segmencie danych. Ta pamięć jest specjalnie przechowywana do ponownego wykorzystania.
streszczenie
„malloc” oznacza główny punkt alokacji pamięci
System mmap wywołuje i żąda od jądra znalezienia nieużywanych regionów w adresach aplikacji, które mogą pomieścić mapowanie kilku stron pamięci
Mmap nie jest zalecany do przydzielania pamięci, ponieważ dzieli 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.