Domanda

Che cosa limita la dimensione di un file mappato in memoria? So che non può essere più grande del più grande pezzo continuo di spazio di indirizzi non allocato, e che ci dovrebbe essere abbastanza spazio libero su disco. Ma ci sono altri limiti?

È stato utile?

Soluzione

Sei stato troppo conservatore: un file mappato in memoria può essere maggiore dello spazio degli indirizzi. Il Visualizza del file mappato in memoria è limitata da vincoli di memoria del sistema operativo, ma questa è solo la parte del file che si sta guardando in una sola volta. (E credo che tecnicamente si potrebbe mappare viste multiple di parti discontinue del file in una sola volta, quindi a parte in testa e dei vincoli della lunghezza della pagina, è solo il # totale di byte che stai guardando che pone un limite. Si potrebbe guardare in byte [da 0 a 1024] e byte [2 40 2 40 + 1024] con due viste separate.)

In MS Windows, guardare il MapViewOfFile funzione. Ci vuole in modo efficace un file a 64 bit offset e una lunghezza di 32 bit.

Altri suggerimenti

Questa è stata la mia esperienza quando si utilizza file mappati in memoria in Win32:

Se la vostra carta l'intero file in un segmento, normalmente rubinetti fuori a circa 750 MB, perché non riesce a trovare un blocco contiguo più grande di memoria. Se dividerlo in segmenti più piccoli, dicono 100MB ciascuno, si può andare in giro 1500MB-1800MB a seconda di che cosa è in esecuzione.

Se si utilizza l'opzione / 3g si può ottenere più di 2GB fino a circa 2700MB ma le prestazioni del sistema operativo viene penalizzato.

Non sono sicuro circa il 64-bit, non ho mai provato, ma presumo la dimensione massima del file viene quindi limitato solo dalla quantità di memoria fisica che hai.

Non ci dovrebbero essere altri limiti. non sono quelli abbastanza? ; -)

In ambiente Windows: "La dimensione di una visualizzazione di file è limitata al più grande blocco contiguo di memoria virtuale disponibile senza riserve Questo è al massimo di 2 GB meno la memoria virtuale già riservato dal processo".

MDSN .

Non sono sicuro su Linux / OSX / qualsiasi altra cosa, ma probabilmente è anche legato ad affrontare lo spazio.

FUSE su linux si potrebbe anche fare un filesystem in memoria che si estende su disco su richiesta. Non sono sicuro che si qualifica come memoria mappata, e la distinzione diventa un po 'sfocata.

Sì, ci sono limiti a file mappati in memoria. La maggior parte incredibilmente è:

  

file mappati in memoria non possono essere più grandi di 2 GB su sistemi a 32 bit.

     

Quando un memmap causa un file da creare o esteso oltre la sua dimensione attuale nel filesystem, i contenuti della nuova parte sono non specificata. Nei sistemi con semantica POSIX file system, la parte estesa sarà riempito con zero byte.

Anche il mio 64-bit, 32 GB di RAM di sistema, ottengo il seguente errore se provo a leggere in un unico grande file memory-mapped NumPy invece di prendere porzioni di esso utilizzando byte-offset:

Overflow Error: memory mapped size must be positive

Grandi insiemi di dati sono davvero un dolore con cui lavorare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top