¿Cómo asignar una parte de la memoria a un archivo?
Los archivos asignados en memoria no son simples operaciones de E/S de archivos. En realidad, utilizan la tecnología de programación central de la administración de memoria de Windows. Por lo tanto, si desea tener una comprensión más profunda de los archivos mapeados en memoria, debe tener una comprensión clara del mecanismo de administración de memoria del sistema operativo Windows. El siguiente es el método general para usar archivos asignados en memoria:
Primero, cree o abra un objeto del núcleo del archivo a través de la función CreateFile(), que identifica el archivo en el disco que se usará como memoria. archivo mapeado. Después de usar CreateFile() para notificar al sistema operativo la ubicación de la imagen del archivo en la memoria física, solo se especifica la ruta al archivo de imagen y no se especifica la longitud de la imagen. Para especificar cuánto espacio de almacenamiento físico requiere un objeto de mapeo de archivos, se debe crear un objeto kernel de mapeo de archivos a través de la función CreateFileMapping() para indicarle al sistema el tamaño del archivo y cómo acceder al mismo. Después de crear un objeto de asignación de archivos, se debe reservar una región del espacio de direcciones para los datos del archivo y los datos del archivo se deben confirmar como memoria física asignada a esa región. La función MapViewOfFile () es responsable de asignar todo o parte del objeto de asignación de archivos al espacio de direcciones del proceso a través de la administración del sistema. En este punto, el uso y procesamiento de archivos mapeados en memoria es básicamente el mismo que el de los datos de archivos normalmente cargados en la memoria. Cuando se utiliza un archivo asignado en memoria, se debe borrar mediante una serie de operaciones y se liberan los recursos utilizados. Esta parte es relativamente fácil. Puede desasignar los datos del archivo del espacio de direcciones del proceso a través de UnmapViewOfFile() y cerrar los objetos de mapeo de archivos y los objetos de archivo creados previamente a través de CloseHandle().