Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Descripción general de la asignación de memoria

¿Qué es la asignación de memoria?

La asignación de memoria es un mecanismo que asigna una parte de un archivo, o un archivo completo, en el disco a un rango de direcciones dentro del espacio de direcciones de una aplicación. La aplicación puede acceder a los archivos en el disco de la misma manera que accede a la memoria dinámica. Esto hace que las lecturas y escrituras de archivos sean más rápidas en comparación con el uso de funciones como y.freadfwrite

Beneficios de la asignación de memoria

Las principales ventajas de la asignación de memoria son la eficiencia, el acceso más rápido a los archivos, la capacidad de compartir memoria entre aplicaciones y una codificación más eficiente.

Acceso más rápido a archivos

Acceder a los archivos a través del mapa de memoria es más rápido que usar funciones de e/s como y.freadfwrite Los datos se leen y escriben utilizando las capacidades de memoria virtual que se compilan en el sistema operativo en lugar de tener que asignar, copiar y, a continuación, cancelar la asignación de búferes de datos propiedad del proceso.

no tiene acceso a los datos del disco cuando se construye el mapa por primera vez.MATLAB® Solo lee o escribe el archivo en el disco cuando se tiene acceso a una parte especificada del mapa de memoria y, a continuación, solo Lee esa parte específica. Esto proporciona un acceso aleatorio más rápido a los datos asignados.

Eficiencia

La asignación de un archivo a la memoria permite el acceso a los datos del archivo como si esos datos hubieran sido leídos en una matriz en el espacio de direcciones de la aplicación. Inicialmente, solo asigna espacio de direcciones para la matriz; realmente no lee los datos del archivo hasta que se accede a la región asignada.MATLAB Como resultado, los archivos asignados a la memoria proporcionan un mecanismo por el cual las aplicaciones pueden acceder a los segmentos de datos en un archivo extremadamente grande sin tener que leer todo el archivo en la memoria primero.

Estilo de codificación eficiente

La asignación de memoria en la aplicación le permite acceder a los datos de archivo mediante operaciones de indexación estándar.MATLABMATLAB Una vez que haya asignado un archivo a la memoria, puede leer el contenido de ese archivo utilizando el mismo tipo de instrucciones que se utilizan para leer las variables del área de trabajo.MATLABMATLAB El contenido del archivo asignado aparece como si fuera una matriz en el espacio de trabajo activo actualmente. Simplemente indexa esta matriz para leer o escribir los datos deseados del archivo. Por lo tanto, no necesita llamadas explícitas a las funciones y.freadfwrite

En, si es una variable asignada a la memoria, y es los datos que se escriben en un archivo, escribir en el archivo es tan simple comoMATLABxy

x.Data = y; 

Compartir memoria entre aplicaciones

Los archivos asignados a memoria también proporcionan un mecanismo para compartir datos entre aplicaciones, como se muestra en la figura siguiente. Esto se logra al tener cada sección de mapa de aplicación del mismo archivo. Puede utilizar esta función para transferir grandes conjuntos de datos entre otras aplicaciones.MATLAB

Además, dentro de una sola aplicación, puede asignar el mismo segmento de un archivo más de una vez.

Cuándo usar la asignación de memoria

La cantidad de ventaja que obtiene al asignar un archivo a la memoria depende principalmente del tamaño y el formato del archivo, de la forma en que se utilizan los datos del archivo y de la plataforma informática que está utilizando.

Cuando la asignación de memoria es más útil

La asignación de memoria funciona mejor con archivos binarios y en los siguientes escenarios:

  • Para los archivos grandes a los que desea acceder aleatoriamente una o más veces

  • Para los archivos pequeños que desea leer en la memoria una vez y acceder con frecuencia

  • Para los datos que desea compartir entre aplicaciones

  • Cuando desee trabajar con datos en un archivo como si se tratara de una matrizMATLAB

Cuando la ventaja es menos significativa

Los siguientes tipos de archivos no utilizan completamente las ventajas de la asignación de memoria:

  • Los archivos binarios formateados como HDF o TIFF que requieren lectores personalizados no son buenos para la asignación de memoria. Describir los datos contenidos en estos archivos puede ser una tarea muy compleja. Además, no puede tener acceso a los datos directamente desde el segmento asignado, pero en su lugar debe crear matrices para contener los datos.

  • Los archivos de texto o ASCII requieren que convierta el texto de la región asignada a un tipo adecuado para que los datos sean significativos. Esto ocupa espacio de direcciones adicional.

  • Los archivos de un tamaño superior a varios cientos de megabytes consumen una cantidad significativa del espacio de direcciones virtual necesario para procesar el programa.MATLAB Los archivos de asignación de este tamaño pueden dar lugar a informes de errores de memoria más a menudo.MATLAB Esto es más probable si se ha estado ejecutando durante algún tiempo, o si la memoria utilizada por se fragmenta.MATLABMATLAB

Tamaño máximo de un mapa de memoria

Debido a los límites establecidos por el sistema operativo y, la cantidad máxima de datos que puede asignar con una sola instancia de un mapa de memoria es de 2 gigabytes en sistemas de 32 bits y 256 terabytes en sistemas de 64 bits.MATLAB Si necesita asignar más de este límite, puede crear mapas independientes para diferentes regiones del archivo, o bien puede mover la ventana de un mapa a diferentes ubicaciones del archivo.

Orden de bytes

La asignación de memoria solo funciona con los datos que tienen el mismo esquema de ordenación de bytes que el orden de bytes nativo del sistema operativo. Por ejemplo, debido a que tanto Linus Torvalds ' como los sistemas utilizan el orden de bytes Little-endian, los datos creados en un sistema se pueden leer en los sistemas.Linux®Microsoft®Windows®LinuxWindows Puede utilizar la función para determinar el orden de bytes nativo de su sistema actual.computer