In Mmap multipel() manpage:Warum Datei in mmap Start-Offset() muss der Seitengröße
Der Prototyp ist:
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
und Beschreibung:
The mmap() function asks to map 'length' bytes starting at offset 'offset'
from the file (or other object) specified by the file descriptor fd into
memory, preferably at address 'start'.
Sepcifically für das letzte Argument:
'offset' should be a multiple of the page size as returned by getpagesize(2).
Von dem, was ich geübt habe, offset
MUSS ein Vielfaches der Seitengröße sein, zum Beispiel 4096 auf meinem Linux, andernfalls würde mmap() Invalid argument
, offset
ist für den Dateioffset, warum es mehrere Seiten des virtuellen Speichersystems Größe sein muss ?
Danke,
"Das Betriebssystem muss sicherstellen, dass dieser Speicherort mit dem Inhalt der Datei gefüllt ist. Aber das Betriebssystem kann nur erkennen, ob Sie auf eine Speicherseite zugreifen - nicht auf einen einzelnen Speicherort." Könntest du hier etwas einfacher und klarer sein? Unfähig zu absorbieren. Vielen Dank! –
@GauravMinocha Das Betriebssystem kann nur feststellen, dass eine ganze Seite gelesen wird (in diesem Beispiel 4096 Byte), nicht z. B. eine einzelne Byteadresse (im RAM kann jedes einzelne Byte des Speichers adressierbar sein). So werden ganze Seiten der Datei gleichzeitig geladen. – jwbensley