Sto cercando di rimappare i file mappati in memoria su un Mac (quando voglio espandere lo spazio disponibile).Non c'è davvero nessun mremap in Darwin?
Vedo che i nostri amici nel mondo Linux hanno mremap
ma non riesco a trovare alcuna funzione nelle intestazioni sul mio Mac. /Developer/SDKs/MacOSX10.6.sdk/usr/include/sys/mman.h
ha il seguente:
mmap
mprotect
msync
munlock
munmap
- ma nessuno
mremap
man mremap
conferma le mie paure.
Attualmente sto avendo munmap
e mmmap
se voglio ridimensionare la dimensione del file mappato, che comporta l'invalidazione di tutte le pagine caricate. Ci deve essere un modo migliore. Certamente?
Sto provando a scrivere codice che funzionerà su Mac OS X e Linux. Potrei accontentarsi di una macro per utilizzare la migliore funzione in ogni caso se I avesse ma preferirei farlo correttamente.
Quindi stai suggerendo che dovrei allocare per la dimensione più grande possibile che potrei mai volere e riempire il buco? È un'idea interessante ma o mapperò il massimo possibile di indirizzi e non lascerò più indirizzi per nient'altro o ne uso una quantità minore e correrò il rischio di finire. Inoltre, questo non sarebbe multipiattaforma (come indicato nella mia domanda) poiché non potevo garantire che alcuni filesystem non azzerassero effettivamente l'intero intervallo del file e sprecassero gigabyte. – Joe
Non è nemmeno necessario rendere il file su disco così grande. Solo 'mmap' più grande della dimensione del file. Gli accessi oltre la fine del file risulteranno in 'SIGBUS', quindi è necessario' ftruncate' più a lungo prima di provare ad accedere a nuove parti tramite 'mmap', ma per il resto va bene. –