Was macht diese Codezeile?
mmap(NULL, n, PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
Was macht diese Codezeile?
mmap(NULL, n, PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
Café
Es fordert eine private, beschreibbare anonyme Zuordnung von an n
Bytes Speicher.
fork()
das Kind und das Elternteil haben unabhängige Zuordnungen);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
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 Zuordnungn
– Länge des Mappings (in Bytes)PROT_WRITE
– Es dürfen Seiten geschrieben werdenMAP_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 ist0
– 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