W programowaniu w C istnieje pamięć dynamiczna, która wskazuje na alokację pamięci w standardowej bibliotece C za pomocą zestawu funkcji. Malloc jest jednym z nich, który służy do przydzielania pamięci. Następnie jest mmap. Jest on używany jako system mapowany w pamięci, który ma swoje unikalne dane wejściowe i wyjściowe. Te dwa zapewniają te same funkcje, ale dokładniejsze zagłębienie się w ten temat ujawnia pewne różnice.
Mmap kontra Malloc
Różnica między mmap i malloc polega na tym, że czas wykonania mmap jest znacznie krótszy niż w przypadku malloc. Malloc to główny interfejs alokacji pamięci, podczas gdy mmap to system. Jest to odpowiedzialne za wyszukiwanie przez jądro wystarczająco dużych adresów, aby umożliwić mapowanie wielu stron.
Mmap in computing to wielozadaniowe wywołanie systemowe POSIX, które rejestruje wszystkie dane lub pliki i urządzenia w swojej pamięci. Jest to również znane jako metoda, która należy do pliku mapowanego w pamięci i implementuje kopiowanie danych do jego pamięci fizycznej, ponieważ zawartość nie może być bezpośrednio odczytana z dysku.
Malloc to krótka forma terminu alokacja pamięci, która jest używana do dynamicznego przydzielania ogromnego bloku danych, w odniesieniu do określonego rozmiaru, a gdy się powiedzie, zwraca wskaźnik wskazujący na pierwszy bajt przydzielonej pamięci, w przeciwnym razie zwraca NULL. W rzeczywistym mechanizmie alokacji pamięci dostępnych jest wiele różnych osiągnięć, które są wykorzystywane przez Malloc.
Tabela porównawcza między Mmap i Malloc
Parametry porównania | Mmap | Malloc |
Definicja | Mmap odnosi się do wywołania systemowego, które prosi jądro o znalezienie dużego adresu do mapowania stron. | Malloc to główny interfejs alokacji pamięci, który gromadzi wszystkie funkcje dostępne w systemie. |
Funkcjonować | Mmap używa przełącznika kontekstu i czyni go kernellandem. | Malloc alokuje blok pamięci w apile. |
Nazywany również jako | Mmap jest również znany jako wywołanie systemowe. | Malloc jest również znany jako główny interfejs alokacji pamięci. |
Wyniki | Mmap nie wpływa na wydajność innego systemu. | Malloc dezorganizuje i powoduje słabą wydajność systemu. |
Najlepiej nadaje się do | Mmap najlepiej nadaje się do przyspieszenia procesu odpowiedzi udzielanych przez aplikacje. | Malloc najlepiej nadaje się do przydzielania pamięci w dowolnej aplikacji w systemie. |
Co to jest Mmap?
Mmap odnosi się do wywołania systemowego Unix zgodnego z POSIX, które mapuje dane, plik lub urządzenie do pamięci. Jest to wejściowa i wyjściowa metoda mapowania pamięci. W procesie wywołującym tworzone jest nowe mapowanie w wirtualnej przestrzeni adresowej. W dod. znajduje się początkowy adres nowego mapowania, a długość mapowania jest określona przez argument length (który powinien być większy niż 0).
Jeśli adres zostanie uznany za NULL, to adres jest wybierany przez jądro, które dokonuje mapowania, które jest uważane za najłatwiejszą metodę tworzenia nowego mapowania. Jeśli adres nie jest znaleziony jako NULL, jądro traktuje to jako wskazówkę do umieszczenia mapowania w miejscu w systemie Linux.
Jądro znajduje najbliższą granicę strony i próbuje wykonać mapowanie w tym obszarze. Jeśli jądro znajdzie mapowanie, które już istnieje w obszarze, wybiera nowy adres, który może zależeć od wskazania przyjętego przez jądro. W wyniku tego wywołania zostaje odesłany adres nowego mapowania. Zaraz po zwróceniu wywołania deskryptor pliku fd natychmiast zamyka mapowanie bez unieważniania.
Co to jest Malloc?
Malloc() to funkcja alokacji pamięci, która przydziela rozmiar bajtów i odsyła wskaźnik do przydzielonej pamięci. Pamięć nie jest ustawiona w swojej początkowej pozycji. Jeśli nazwa bajtu rozmiaru wynosi 0, to malloc() wysyła albo NULL, albo wskaźnik unikalnej wartości, który później może zostać pomyślnie przekazany do free().
Przestrzeń pamięci, na którą wskazuje ptr, jest zwalniana przez funkcję free(), która miała zostać odesłana przez malloc(). W przeciwnym razie mówi się, że niezdefiniowane zachowanie występuje, jeśli free (ptr) zostało wywołane wcześniej. Żadna operacja nie jest wykonywana ani wykonywana, jeśli ptr ma wartość Found NULL. Jeśli znalezione ptr ma wartość NULL, to wartość wywołania jest równa malloc (rozmiar), dla każdej wartości rozmiaru; jeśli jest równoważne 0, a ptr nie jest NULL, to wartość wywołania jest równa free (ptr).
Tylko wtedy, gdy ptr ma wartość NULL, powinno zostać odesłane przez poprzednie wywołanie malloc(). A obszar, który został wskazany został zmieniony, zrobiono wolny (ptr). Domyślnie Linux stosuje optymistyczną strategię alokacji pamięci, co oznacza, że jeśli malloc() odeśle z powrotem wartość inną niż NULL, istnieje prawdopodobieństwo, że pamięć może zostać utracona. A jeśli okaże się, że w systemie brakuje pamięci, kilka procesów zostanie zniszczonych przez zabójcę OOM.
Główne różnice między Mmap a Malloc
Wniosek
Podsumowując, mmap to wywołanie systemowe, które prosi jądro o zlokalizowanie pustego regionu w adresie aplikacji, który pasowałby do mapowania różnych stron pamięci, podczas gdy malloc jest punktem alokacji pamięci, który przydziela blok pamięci o określonym rozmiarze. Pamięć jest ustawiana na czas jej działania, co oznacza, że do czasu wykonania programu nie można zarezerwować innej przestrzeni.
W niektórych miejscach mmap ma przewagę nad malloc, jednak nie zaleca się wyboru między tymi dwoma do alokacji pamięci, ponieważ mmap dzieli pamięć, a następnie nie jest w stanie wykonać wywołania systemowego.