mmapist großartig, wenn mehrere Prozesse schreibgeschützt auf Daten aus derselben Datei zugreifen, was bei den von mir geschriebenen Serversystemen üblich ist. mmapErmöglicht all diesen Prozessen, dieselben physischen Speicherseiten gemeinsam zu nutzen, wodurch viel Speicherplatz gespart wird.
mmapAußerdem kann das Betriebssystem Paging-Vorgänge optimieren. Betrachten Sie beispielsweise zwei Programme. Programm, Adas eine 1MBDatei in einen Puffer einliest , der mit erstellt malloc, und Programm B, das mmapsdie 1-MB-Datei in den Speicher legt. Wenn das Betriebssystem einen Teil des ASpeichers austauschen muss, muss es den Inhalt des zu austauschenden Puffers schreiben, bevor es den Speicher wiederverwenden kann. In diesem BFall können unveränderte mmapSeiten 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 mmapSeiten zunächst als schreibgeschützt markiert und Seg-Fehler abfängt , ähnlich wie bei der Strategie "Beim Schreiben kopieren" .)
mmapist auch nützlich für die Kommunikation zwischen Prozessen . Sie können mmapeine Datei als Lese- / Schreibzugriff in den Prozessen verwenden, die kommunizieren müssen, und dann Synchronisationsprimitive in der mmap'dRegion verwenden (dafür ist das MAP_HASSEMAPHOREFlag vorgesehen).
Ein mmapunangenehmer 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 mmapals 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 Xabrufen 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. mmapkann nicht für Dinge wie Pipes und Ttys verwendet werden .