Compartir vía


Ámbito de la memoria asignada

Toda la memoria que asigna un proceso mediante las funciones de asignación de memoria ( HeapAlloc, VirtualAlloc, GlobalAlloco LocalAlloc) solo es accesible para el proceso. Sin embargo, la memoria asignada por un archivo DLL se asigna en el espacio de direcciones del proceso que llamó al archivo DLL y no es accesible para otros procesos mediante el mismo archivo DLL. Para crear memoria compartida, debe usar la asignación de archivos.

La asignación de archivos con nombre proporciona una manera sencilla de crear un bloque de memoria compartida. Un proceso puede especificar un nombre cuando usa la función CreateFileMapping para crear un objeto de asignación de archivos. Otros procesos pueden especificar el mismo nombre para la función CreateFileMapping o función OpenFileMapping para obtener un identificador para el objeto de asignación.

Cada proceso especifica su identificador para el objeto de asignación de archivos en la función MapViewOfFile para asignar una vista del archivo en su propio espacio de direcciones. Las vistas de todos los procesos de un único objeto de asignación de archivos se asignan a las mismas páginas que se pueden compartir del almacenamiento físico. Sin embargo, las direcciones virtuales de las vistas asignadas pueden variar de un proceso a otro, a menos que la función MapViewOfFileEx se use para asignar la vista en una dirección especificada. Aunque se puede compartir, las páginas de almacenamiento físico que se usan para una vista de archivo asignada no son globales; no son accesibles para los procesos que no han asignado una vista del archivo.

Las páginas confirmadas mediante la asignación de una vista de un archivo se liberan cuando el último proceso con una vista del objeto de asignación finaliza o desasigna su vista llamando a la función UnmapViewOfFile. En este momento, se actualiza el archivo especificado (si existe) asociado al objeto de asignación. Un archivo especificado también se puede forzar a actualizar llamando a la función FlushViewOfFile.

Para obtener más información, vea asignación de archivos . Para obtener un ejemplo de memoria compartida en un archivo DLL, consulte Uso de memoria compartida en una biblioteca de Dynamic-Link.

Si varios procesos tienen acceso de escritura a la memoria compartida, debe sincronizar el acceso a la memoria. Para obtener más información, vea Synchronization.