Pregunta

Tengo que lidiar con una enorme cantidad de datos que normalmente no encaja en la memoria principal. A mi modo de acceder a estos datos tiene una alta localidad, por lo que el almacenamiento en caché partes de él en las miradas de memoria como una buena opción. ¿Es factible simplemente malloc () una enorme variedad, y dejar que la cifra sistema operativo qué bits de la página y qué bits para mantener?

¿Fue útil?

Solución

Suponiendo que los datos provienen de un archivo, es mejor que la asignación de memoria de archivos. De lo contrario, lo que termina haciendo es la asignación de la matriz, y luego copiar los datos de su archivo en la matriz - y puesto que la matriz se asigna al archivo de página, que está básicamente sólo copiar el archivo original en el archivo de página, y en el proceso de contaminar el "caché" (es decir, la memoria física) para que otros datos que está actualmente activo tiene muchas más posibilidades de ser desalojados. Luego, cuando haya terminado (por lo general) escribir datos de la parte posterior de la matriz en el archivo original, que (en este caso) mediante la copia de la parte posterior del archivo de página en el archivo original.

Asignación de memoria el archivo en su lugar sólo crea un espacio de direcciones y mapas directamente en el archivo original en su lugar. Esto evita la copia de los datos del archivo original en el archivo de página (y de nuevo cuando haya terminado) como en movimiento así como temporalmente los datos en la memoria física en el camino desde el archivo original en el archivo de página. La victoria más importante, por supuesto, es cuando / si hay piezas sustanciales del archivo original que nunca se utiliza realmente en absoluto (en cuyo caso puede que nunca se lee en la memoria física en absoluto, suponiendo que la porción no utilizada es al menos una página en tamaño).

Otros consejos

Si los datos están en un archivo grande, mirar en el uso de mmap para leerlo. Las computadoras modernas tienen tanta memoria RAM, puede que no hay suficiente espacio de intercambio disponible.

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