Was macht mmap?

Lesezeit: 1 Minute

Was macht diese Codezeile?

mmap(NULL, n, PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);

Benutzeravatar des Cafés
Café

Es fordert eine private, beschreibbare anonyme Zuordnung von an n Bytes Speicher.

  • Eine private Zuordnung bedeutet, dass sie nicht mit anderen Prozessen geteilt wird (z. B. nach einem fork() das Kind und das Elternteil haben unabhängige Zuordnungen);
  • Eine anonyme Zuordnung bedeutet, dass sie nicht durch eine Datei gesichert ist.

In diesem Fall wird im Wesentlichen ein Block von angefordert n Bytes Speicher, also ungefähr gleichbedeutend mit malloc(n) (obwohl es mit freigegeben werden muss munmap() statt free(), und es wird seitenausgerichtet). Es fordert auch, dass der Speicher beschreibbar ist, aber nicht, dass er lesbar ist. Allerdings ist beschreibbarer und nicht lesbarer Speicher normalerweise keine Kombination, die von der zugrunde liegenden Hardware unterstützt wird. Wenn PROT_WRITE Allein angefordert wird, ermöglicht POSIX der Implementierung, Speicher bereitzustellen, der auch gelesen und/oder ausführbar sein kann.

  • Auf x86 impliziert PROT_WRITE PROT_READ und POSIX erlaubt dies.

    – Iwillnotexist Idonotexist

    1. Mai 2019 um 1:27

Benutzer-Avatar von Richard Fearn
Richard Fearn

man mmap wird dir hier weiterhelfen.

Es erstellt eine Speicherzuordnung im virtuellen Adressraum des Prozesses. Es entsteht ein anonym Mapping, was eher der Verwendung ähnelt malloc zuzuordnen n Bytes Speicher.

Die Parameter sind:

  • NULL – Der Kernel wählt eine Adresse für die Zuordnung
  • n – Länge des Mappings (in Bytes)
  • PROT_WRITE – Es dürfen Seiten geschrieben werden
  • MAP_ANON | MAP_PRIVATE – Das Mapping wird nicht durch eine Datei gesichert und in das Mapping geschriebene Aktualisierungen sind für den Prozess privat
  • -1 – der Dateideskriptor; wird nicht verwendet, da die Zuordnung nicht durch eine Datei gesichert ist
  • 0 – Offset innerhalb der Datei, bei dem das Mapping gestartet werden soll – wird wiederum nicht verwendet, da das Mapping nicht durch eine Datei unterstützt wird

1452120cookie-checkWas macht mmap?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy