Was ist der Zweck des flag MAP_ANONYMOUS in mmap-Systemaufruf?
Aus der man
Seite,
MAP_ANONYMOUS
The mapping is not backed by any file; its contents are initialized to zero. The fd and offset arguments are ignored; however, some implementations require
fd to be -1 if MAP_ANONYMOUS (or MAP_ANON) is specified, and portable applications should ensure this. The use of MAP_ANONYMOUS in conjunction with
MAP_SHARED is only supported on Linux since kernel 2.4.
Was ist der Zweck der Verwendung MAP_ANONYMOUS
? Jedes Beispiel, das wäre gut. Auch Von wo der Speicher gemappt werden?
Es ist geschrieben auf man
Seite, die The use of MAP_ANONYMOUS in conjunction with MAP_SHARED is only supported on Linux since kernel 2.4.
Wie kann ich die memory-mapped mit MAP_ANONYMOUS mit anderen Verfahren?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anonyme mappings können abgebildet werden als zeroized virtuellen Datei.
Anonyme mappings sind einfach große, null-gefüllten Speicherblöcke bereit für den Einsatz.
Diese Zuordnungen, die Ihren Wohnsitz außerhalb des heap, also nicht zur Daten-segment Fragmentierung.
MAP_ANONYMOUS + MAP_PRIVATE:
in der Regel, MMAP_THRESHOLD ist 128kB.
MAP_ANONYMOUS + MAP_SHARED:
Unter Linux, es gibt zwei Möglichkeiten zum erstellen von anonymen mappings:
angeben MAP_ANONYMOUS-flag und übergeben Sie -1 für fd
open /dev/null und übergeben Sie diese öffnete fd
(diese Methode wird normalerweise verwendet, auf Systemen wie BSD, die keine flag MAP_ANONYMOUS)
Vorteile der anonymen mappings:
- keine virtuellen Adressraum Fragmentierung; nach der Abkopplung, der Speicher wird sofort an das system zurückgegeben
- Sie sind veränderbar in Bezug auf die Zuweisung Größe, Berechtigungen und können Sie auch beraten, wie normale mappings
- jede Zuordnung ist eine eindeutige Zuordnung, getrennt von globalen heap
Nachteile der anonymen mappings:
- Größe der einzelnen mapping ist ein ganzzahliges Vielfaches der system-Seite die Größe, so kann es führen, um die Verschwendung von Adressraum
- erstellen und zurückgeben Zuordnungen mehr Aufwand als der aus der pre-allokierten heap
wenn ein Programm mit solchen Zuordnung, Gabeln eines Prozesses, das Kind erbt die Zuordnung.
Das folgende Programm veranschaulicht diese Art der Vererbung:
Quellen:
The Linux Programming Interface
Kapitel 49: Speicher-Mappings
Autor: Michael Kerrisk
Linux System Programming (3rd edition)
Kapitel 8: Speicherverwaltung
Autor: Robert Liebe