Domanda

C'è un modo per leggere direttamente un file binario nella RAM?

Quello che voglio dire è, c'è un modo per dire al compilatore, ecco il file, ecco il blocco di RAM, per favore metti il ​​contenuto del file nella RAM, e vai, più velocemente che puoi.

Attualmente sto esaminando il file con ifstream caricandolo nella RAM (un array) blocco a 64 bit per blocco a 64 bit.Ma penso che questo debba rallentarlo perché è come (ecco un'analogia) usare un ditale per scaricare l'acqua da una tazza (il file) in una brocca (il RAM) piuttosto che semplicemente prendere la tazza e versare l'intero contenuto nella caraffa in un colpo solo.

Essendo relativamente nuovo a questo, potrei avere un'idea completamente sbagliata al riguardo: qualsiasi guida sarebbe di grande aiuto.

Sto cercando il modo più rapido per inserire un file di grandi dimensioni nella RAM.

Grazie

È stato utile?

Soluzione

Che cosa vi impedisce di lettura del file in un solo passaggio? E 'troppo grande per la memoria?

È inoltre possibile utilizzare file mappato, UNIX: mmap, Windows: CreateFileMapping

Altri suggerimenti

Penso che quello che vi serve è memoria mappata file di , tuttavia l'API dipende quale sistema operativo ci si trova, in UNIX credo che sia mmap ().

mmap dovrebbe funzionare per voi. La maggior parte delle implementazioni in realtà non leggere il file fino a quando si fa riferimento alle pagine di memoria attuali, ma in ogni caso è possibile accedere al contenuto del file come se fosse nella RAM per tutto il tempo.

Non si dice che la piattaforma ci si trova, ma questo suona come un lavoro per file mappati in memoria.

Il programma è dato memoria virtuale - alcune delle quali è mappato su RAM, un po 'sul file di swap e non si può fare molto su di esso. Tuttavia è possibile ridurre l'overhead di utilizzare l'interfaccia del filesystem, semplicemente copiando blocchi più grandi -. Diversi megabyte per esempio

Non sono sicuro se questo è quello che stai chiedendo, ma per accelerare la lettura da un file si può tamponare più byte. il secondo parametro del metodo read () di fstream può essere impostato per specificare la dimensione di ingresso. dandogli, per esempio, un (* () 32 2 ^ 10) valore 32k potrebbe accelerare il processo di lettura. Vi suggerisco di fare un po 'di benchmarking con diverse dimensioni del buffer.

Se vuoi dire "evitando di mettere il file su swap e mettere sempre in RAM" Penso che si possa, dal momento che questo è qualcosa che il sistema operativo si prende cura.

Guarda l'esempio ContentStreaming nell'SDK DirectX.

Utilizza l'approccio di mappatura dei file.Ovviamente utilizza l'API di Windows, ma puoi trovare l'API corrispondente anche per altre piattaforme.

La cosa interessante è che ti mostra l'approccio nel contesto.(Lettura/impaginazione di parti di un modello enorme (in questo caso il terreno) su richiesta

Boost offre il supporto trasversale piattaforma per file mappati in memoria, tra le altre cose ...

Boost file mappato in memoria

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