Pregunta

¿Hay una manera de leer directamente un archivo binario en la memoria RAM?

Lo que quiero decir es, ¿hay una manera de decirle al compilador, aquí está el archivo, aquí está el bloque de memoria RAM, por favor ponga el contenido del archivo en la memoria RAM, te vas, más rápido que puedas, por favor.

Actualmente estoy dando un paso a través del archivo con ifstream carga en la RAM (una matriz) bloque de 64 bits por bloque de 64 bits. Pero estoy pensando que esto debe reducir la velocidad ya que es como (aquí viene una analogía) usando un dedal para rescatar el agua de un vaso (el archivo) en una jarra (la RAM) en lugar de sólo levantar la copa y inclinar todo el contenido en la jarra de una sola vez.

Como un recién llegado a esto puede tener por completo la idea equivocada acerca de esto -. Guidence cualquier sería una gran ayuda

Estoy justo después de la forma más rápida de conseguir un gran archivo en la memoria RAM.

Gracias

¿Fue útil?

Solución

Lo que impide leer el archivo en una sola pasada? ¿Es demasiado grande para caber en la memoria?

También puede utilizar archivo asignado, UNIX: mmap, Windows: CreateFileMapping

Otros consejos

Creo que lo que necesita es archivo de memoria asignada , sin embargo, la API depende qué sistema operativo que se encuentra, en UNIX, creo que es mmap ().

mmap debería funcionar para usted. La mayoría de las implementaciones en realidad no leen el archivo hasta que se hace referencia a las páginas de memoria reales, pero en cualquier caso se puede acceder al contenido del archivo como si fuera en la memoria RAM todo el tiempo.

Usted no dice qué plataforma que se encuentra, pero esto suena como un trabajo para archivos mapeados en memoria.

Su programa se da la memoria virtual - algunos de los que está asignada a la memoria RAM, algunos en el archivo de intercambio y no se puede hacer mucho al respecto. Sin embargo, puede reducir la sobrecarga de uso de la interfaz del sistema de ficheros con sólo copiar los bloques más grandes -. Varios megabytes por ejemplo

No estoy seguro si esto es lo que estás pidiendo, pero para acelerar la lectura de un archivo que podría amortiguar más bytes. el segundo argumento del método read () de fstream se puede configurar para especificar el tamaño de la entrada. dándole, por ejemplo, un (* (2 ^ 10) 32) Valor 32k podría acelerar el proceso de lectura. Le sugiero que haga alguna evaluación comparativa con diferente tamaño de búfer.

Si se refiere a "evitar poner el archivo de intercambio y ponerlo siempre en la memoria RAM" Creo que se puede, ya que esto es algo que el sistema operativo se hace cargo.

Mira el ejemplo ContentStreaming en el SDK de DirectX.

Se utiliza el método de asignación de archivos. Obviamente, sus usos de la API de Windows, pero se puede encontrar la API correspondiente a otras plataformas también.

Lo interesante es que muestra el enfoque en su contexto. (Lectura en / de paginación en partes de un enorme modelo (en este caso del terreno) en la demanda

Boost ofrece soporte multiplataforma para la memoria asignada archivos, entre otras cosas ...

alzar archivos mapeados en memoria

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top