mmap
jest świetny, jeśli masz wiele procesów uzyskujących dostęp do danych w trybie tylko do odczytu z tego samego pliku, co jest powszechne w tego typu systemach serwerów, które piszę. mmap
umożliwia wszystkim tym procesom współużytkowanie tych samych stron pamięci fizycznej, oszczędzając dużo pamięci.
mmap
umożliwia także systemowi operacyjnemu optymalizację operacji stronicowania. Rozważmy na przykład dwa programy; program, A
który wczytuje 1MB
plik do bufora tworzącego za pomocą malloc
i program B, który mmaps
1 MB pliku do pamięci. Jeśli system operacyjny musi zamienić część A
pamięci, musi zapisać zawartość bufora do zamiany, zanim będzie mógł ponownie użyć pamięci. W takim B
przypadku wszelkie niezmodyfikowane mmap
strony mogą zostać ponownie użyte natychmiast, ponieważ system operacyjny wie, jak je przywrócić z istniejącego pliku, z którego były mmap
. (System operacyjny może wykryć, które strony są niezmodyfikowane, początkowo oznaczając strony do zapisu mmap
jako tylko do odczytu i wychwytując błędy seg , podobnie jak w przypadku strategii Kopiuj przy zapisie).
mmap
jest również przydatny do komunikacji między procesami . Plik można mmap
odczytywać / zapisywać w procesach, które muszą się komunikować, a następnie używać operacji podstawowych synchronizacji w mmap'd
regionie (po to jest MAP_HASSEMAPHORE
flaga).
Jedno miejsce mmap
może być niewygodne, jeśli musisz pracować z bardzo dużymi plikami na komputerze 32-bitowym. Wynika to z faktu, że mmap
musi znaleźć ciągły blok adresów w przestrzeni adresowej procesu, który jest wystarczająco duży, aby zmieścił się w całym zakresie mapowanego pliku. Może to stanowić problem, jeśli twoja przestrzeń adresowa zostanie pofragmentowana, gdzie możesz mieć 2 GB wolnej przestrzeni adresowej, ale żaden indywidualny jej zakres nie mieści się w mapowaniu plików 1 GB. W takim przypadku może być konieczne mapowanie pliku na mniejsze fragmenty, niż gdybyś chciał go dopasować.
Inną potencjalną niezręcznością związaną z mmap
zastępowaniem odczytu / zapisu jest konieczność mapowania na przesunięciach rozmiaru strony. Jeśli chcesz tylko uzyskać dane z przesunięciem X
, musisz naprawić to przesunięcie, aby było zgodne mmap
.
I wreszcie, odczytu / zapisu są jedynym sposobem może działać z niektórymi typami plików. mmap
nie można go używać do rur i tty .