Ich versuche herauszufinden, wie Memory-Mapped-Dateien auf einem Mac neu zugeordnet werden (wenn ich den verfügbaren Speicherplatz erweitern möchte).Gibt es in Darwin wirklich keine Mrmap?
Ich sehe unsere Freunde in der Linux-Welt haben mremap
, aber ich kann keine solche Funktion in den Kopfzeilen auf meinem Mac finden. /Developer/SDKs/MacOSX10.6.sdk/usr/include/sys/mman.h
hat die folgenden:
mmap
mprotect
msync
munlock
munmap
- aber keine
mremap
man mremap
bestätigt meine Ängste.
Ich bin derzeit auf munmap
und mmmap
, wenn ich die Größe der zugeordneten Datei Größe ändern möchte, die Invalidierung aller geladenen Seiten beinhaltet. Es muss einen besseren Weg geben. Sicherlich?
Ich versuche Code zu schreiben, der unter Mac OS X und Linux funktioniert. Ich könnte mich mit einem Makro begnügen, um die jeweils beste Funktion zu verwenden, wenn ich hätte, aber ich würde es lieber richtig machen.
Also schlägst du vor, ich sollte für die größtmögliche Größe zuweisen, die ich jemals wollen und füllen Sie das Loch? Es ist eine interessante Idee, aber entweder kartographiere ich den maximal möglichen Adressbereich und lasse keine Adressen für irgendwas anderes übrig, oder ich benutze einen kleineren Betrag und riskiere, dass ich auslaufe. Dies wäre auch nicht plattformübergreifend (wie in meiner Frage angegeben), da ich nicht garantieren konnte, dass irgendein Dateisystem tatsächlich den gesamten Bereich der Datei auf null setzen und Gigabytes verschwenden würde. – Joe
Sie müssen nicht einmal die Datei auf der Festplatte so groß machen. Nur 'mmap' größer als die Dateigröße. Zugriffe nach dem Ende der Datei führen zu "SIGBUS", also müssen Sie es länger "ftrunzieren", bevor Sie versuchen, über die 'mmap' auf neue Teile zuzugreifen, aber ansonsten ist es in Ordnung. –