mmap
ist großartig, wenn mehrere Prozesse schreibgeschützt auf Daten aus derselben Datei zugreifen, was bei den von mir geschriebenen Serversystemen üblich ist. mmap
Ermöglicht all diesen Prozessen, dieselben physischen Speicherseiten gemeinsam zu nutzen, wodurch viel Speicherplatz gespart wird.
mmap
Außerdem kann das Betriebssystem Paging-Vorgänge optimieren. Betrachten Sie beispielsweise zwei Programme. Programm, A
das eine 1MB
Datei in einen Puffer einliest , der mit erstellt malloc
, und Programm B, das mmaps
die 1-MB-Datei in den Speicher legt. Wenn das Betriebssystem einen Teil des A
Speichers austauschen muss, muss es den Inhalt des zu austauschenden Puffers schreiben, bevor es den Speicher wiederverwenden kann. In diesem B
Fall können unveränderte mmap
Seiten sofort wiederverwendet werden, da das Betriebssystem weiß, wie sie aus der vorhandenen Datei wiederhergestellt werden können, aus der sie stammen mmap
. (Das Betriebssystem kann erkennen, welche Seiten unverändert sind, indem es beschreibbare mmap
Seiten zunächst als schreibgeschützt markiert und Seg-Fehler abfängt , ähnlich wie bei der Strategie "Beim Schreiben kopieren" .)
mmap
ist auch nützlich für die Kommunikation zwischen Prozessen . Sie können mmap
eine Datei als Lese- / Schreibzugriff in den Prozessen verwenden, die kommunizieren müssen, und dann Synchronisationsprimitive in der mmap'd
Region verwenden (dafür ist das MAP_HASSEMAPHORE
Flag vorgesehen).
Ein mmap
unangenehmer Ort kann sein, wenn Sie mit sehr großen Dateien auf einem 32-Bit-Computer arbeiten müssen. Dies liegt daran mmap
, dass im Adressraum Ihres Prozesses ein zusammenhängender Adressblock gefunden werden muss, der groß genug ist, um in den gesamten Bereich der zugeordneten Datei zu passen. Dies kann zu einem Problem werden, wenn Ihr Adressraum fragmentiert wird und möglicherweise 2 GB Adressraum frei sind, aber kein einzelner Bereich für eine Dateizuordnung von 1 GB geeignet ist. In diesem Fall müssen Sie die Datei möglicherweise in kleineren Blöcken zuordnen, als Sie möchten, dass sie passt.
Eine weitere mögliche Unannehmlichkeit mmap
als Ersatz für Lesen / Schreiben besteht darin, dass Sie Ihre Zuordnung für Offsets der Seitengröße starten müssen. Wenn Sie nur einige Daten mit Offset X
abrufen möchten, müssen Sie diesen Offset korrigieren, damit er mit kompatibel ist mmap
.
Und schließlich, Lesen / Schreiben der einzige Weg sind Sie können mit einigen Arten von Dateien. mmap
kann nicht für Dinge wie Pipes und Ttys verwendet werden .