mmap
ist großartig, wenn Sie mehrere Prozesse haben, die nur lesend auf Daten aus derselben Datei zugreifen, was bei der Art von Serversystemen, die ich schreibe, üblich ist. mmap
ermöglicht es all diesen Prozessen, sich dieselben physischen Speicherseiten zu teilen, was eine Menge Speicherplatz spart.
mmap
ermöglicht es dem Betriebssystem auch, Auslagerungsvorgänge zu optimieren. Nehmen wir zum Beispiel zwei Programme: Programm A
die in einem 1MB
Datei in einen Puffer, der mit malloc
und das Programm B, das mmaps
die 1-MB-Datei in den Speicher. Wenn das Betriebssystem einen Teil der Datei auslagern muss A
Wenn das Programm den Speicher verlässt, muss es den Inhalt des Puffers in den Swap-Bereich schreiben, bevor es den Speicher wieder verwenden kann. In B
Fall jede unveränderte mmap
d-Seiten können sofort wiederverwendet werden, da das Betriebssystem weiß, wie es sie aus der vorhandenen Datei wiederherstellen kann, in der sie waren. mmap
'd von. (Das Betriebssystem kann erkennen, welche Seiten unmodifiziert sind, indem es zunächst beschreibbare Seiten markiert. mmap
'd-Seiten als schreibgeschützt und fangen Seg-Fehler ähnlich wie Kopieren auf Schreiben Strategie).
mmap
ist auch nützlich für prozessübergreifende Kommunikation . Sie können mmap
eine Datei als Lese-/Schreibzugriff in den Prozessen, die miteinander kommunizieren müssen, und verwenden Sie dann Synchronisierungsprimitive in der mmap'd
Region (das ist das, was die MAP_HASSEMAPHORE
Flagge ist für).
Ein Ort mmap
Wenn Sie mit sehr großen Dateien auf einem 32-Bit-Rechner arbeiten müssen, kann das unangenehm sein. Dies ist, weil mmap
muß einen zusammenhängenden Adreßblock im Adreßraum Ihres Prozesses finden, der groß genug ist, um den gesamten Bereich der abzubildenden Datei aufzunehmen. Dies kann zu einem Problem werden, wenn Ihr Adreßraum fragmentiert ist, d.h. Sie haben vielleicht 2 GB Adreßraum frei, aber kein einzelner Bereich davon paßt für eine 1 GB große Dateiabbildung. In diesem Fall müssen Sie die Datei möglicherweise in kleineren Teilen abbilden, als Sie möchten, damit sie passt.
Eine weitere potenzielle Unannehmlichkeit bei mmap
als Ersatz für Lesen/Schreiben ist, dass Sie Ihre Zuordnung auf Offsets der Seitengröße beginnen müssen. Wenn Sie nur einige Daten am Offset abrufen wollen X
müssen Sie den Offset so korrigieren, dass er kompatibel ist mit mmap
.
Und schließlich sind Lesen und Schreiben die einzige Möglichkeit, die kann mit einigen Dateitypen arbeiten. mmap
kann nicht verwendet werden für Dinge wie Rohre y ttys .