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.

Asignar archivo a memoria

Cree un mapa de memoria simple

Supongamos que desea crear un mapa de memoria para un archivo llamado, utilizando la función.records.datmemmapfile

Cree un archivo de ejemplo con el nombre, que contenga 5000 valores.records.dat

myData = gallery('uniformdata', [5000,1], 0);  fileID = fopen('records.dat','w'); fwrite(fileID, myData,'double'); fclose(fileID);

A continuación, cree el mapa de memoria. Utilice el argumento de par nombre-valor para especificar que los valores son de tipo.Formatdouble Use el argumento de par nombre-valor para permitir el acceso de escritura a la región asignada.Writable

m = memmapfile('records.dat', ...       'Format', 'double',     ...       'Writable', true)
m =       Filename: 'd:\matlab\records.dat'     Writable: true       Offset: 0       Format: 'double'       Repeat: Inf         Data: 5000x1 double array

crea un objeto,.MATLAB®memmapfilem La propiedad indica que las operaciones de lectura y escritura en la región asignada tratan los datos del archivo como una secuencia de números de precisión doble.Format La propiedad contiene los valores 5000 del archivo,.Datosrecords.dat Puede cambiar el valor de cualquiera de las propiedades, excepto, después de crear el mapa de memoria,.Datosm

Por ejemplo, cambie la posición inicial del mapa de memoria,.m Comience la región asignada 1024 bytes desde el inicio del archivo cambiando el valor de la propiedad.Offset

m.Offset = 1024
m =       Filename: 'd:\matlab\records.dat'     Writable: true       Offset: 1024       Format: 'double'       Repeat: Inf         Data: 4872x1 double array

Siempre que cambie el valor de una propiedad de asignación de memoria, reasigne el archivo a la memoria.MATLAB La propiedad ahora contiene solo 4872 valores.Datos

Especifique el formato de los datos asignados

De forma predeterminada, considera que todos los datos de un archivo asignado son una secuencia de enteros de 8 bits sin signo.MATLAB Sin embargo, los datos pueden ser de un tipo de datos diferente. Cuando se llama a la función, utilice el argumento de par nombre-valor para indicar otro tipo de datos.memmapfileFormat El valor de puede ser un vector de caracteres que identifica una sola clase utilizada en toda la región asignada o una matriz de celdas que especifica más de una clase.Format

Suponga que asigna un archivo de 12 kilobytes de longitud. Los datos leídos de este archivo se pueden tratar como una secuencia de enteros de 6.000 16 bits (2 bytes), o como números de punto flotante de precisión doble de 1.500 8 bytes, para nombrar solo algunas posibilidades. También podría leer estos datos como una combinación de diferentes tipos: por ejemplo, como enteros de 4.000 8 bits (1 byte) seguidos de enteros de 1.000 64 bits (8 bytes). Puede determinar cómo se interpretarán los datos asignados estableciendo la propiedad del mapa de memoria cuando se llama a la función.MATLABFormatmemmapfile

matrices se almacenan en el disco en orden de columna-mayor.MATLAB La secuencia de elementos de matriz es la columna 1, fila 1; columna 1, fila 2; columna 1, última fila; columna 2, fila 1, etcétera. Es posible que necesite transponer o reorganizar el orden de los elementos de la matriz al leer o escribir a través de un mapa de memoria.

Asigne varios tipos de datos y matrices

Si la región que está asignando comprende segmentos de tipos de datos o formas de matriz variables, puede especificar un formato individual para cada segmento. Especifique el valor del argumento de par nombre-valor como una matriz de celdas de-por-3, donde es el número de segmentos.Formatnn Cada fila de la matriz de celdas corresponde a un segmento. La primera celda de la fila identifica el tipo de datos que se aplicará al segmento asignado. La segunda celda contiene las dimensiones de la matriz que se aplicarán al segmento. La tercera celda contiene el nombre de campo para hacer referencia a ese segmento. Para un mapa de memoria, utilice la siguiente sintaxis:m

m = memmapfile(filename,                             ...             'Format', {                              ...                datatype1, dimensions1, fieldname1;   ...                datatype2, dimensions2, fieldname2;   ...                    :          :            :         ...                datatypeN, dimensionsN, fieldnameN})

Supongamos que tiene un archivo de 40.000 bytes de longitud. El código siguiente asigna los datos que empiezan en el byte 209. El valor es una matriz de celdas de 3 por 3 que asigna los datos de archivo a tres clases diferentes:,, y.Formatint16uint32single

m = memmapfile('records.dat',        ...       'Offset', 2048,                ...       'Format', {                    ...          'int16'  [2 2] 'model';     ...          'uint32' [1 1] 'serialno';  ...          'single' [1 3] 'expenses'});

En este caso, asigna los datos como una matriz de 2 por 2 a la que puede acceder utilizando el nombre del campo,.memmapfileint16model Los datos son un valor escalar al que se accede mediante el nombre del campo,.uint32serialno Los datos son una matriz de 1 por 3 nombrada.singleexpenses Cada uno de estos campos pertenece a la matriz de estructura 800-by-1,.m.Data

Esta figura muestra la asignación del archivo de ejemplo.

La siguiente figura muestra el orden de los elementos de la matriz más estrechamente. En particular, ilustra que las matrices se almacenan en el disco en orden de columna-mayor.MATLAB La secuencia de elementos de matriz en el archivo asignado es la fila 1, columna 1; fila 2, columna 1; fila 1, columna 2; y la fila 2, columna 2.

Si los datos del archivo no se almacenan en este orden, es posible que deba transponer o reorganizar el orden de los elementos de la matriz al leer o escribir a través de un mapa de memoria.

Seleccione Archivo para asignar

Puede cambiar el valor de la propiedad en cualquier momento después de construir el objeto.Filenamememmapfile Es posible que desee hacer esto si:

  • Desea utilizar el mismo objeto en más de un archivo.memmapfile

  • Guarde el objeto en un archivo MAT y, después, vuelva a cargarlo en un entorno en el que el archivo asignado se haya movido a una ubicación diferente.memmapfileMATLAB Esto requiere que modifique el segmento de ruta de acceso de la para representar la nueva ubicación.Filename

Actualice la ruta de acceso de la propiedad para un mapa de memoria mediante la notación de puntos.Filename Por ejemplo, para especificar una nueva ruta, para un mapa de memoria, escriba:f:\testfiles\records.datm

m.Filename = 'f:\testfiles\records.dat'

Consulte también

Temas relacionados