Función MapViewOfFile3 (memoryapi.h)
Asigna una vista de un archivo o una sección respaldada por un archivo de página en el espacio de direcciones del proceso especificado.
Con esta función, puede: para las nuevas asignaciones, especificar un intervalo de espacio de direcciones virtuales y una restricción de alineación de potencia de 2; especifique un número arbitrario de parámetros extendidos; especifique un nodo NUMA preferido para la memoria física como parámetro extendido; y especifican una operación de marcador de posición (específicamente, reemplazo).
Para especificar el nodo NUMA, consulte el parámetro ExtendedParameters .
Sintaxis
PVOID MapViewOfFile3(
[in] HANDLE FileMapping,
[in] HANDLE Process,
[in, optional] PVOID BaseAddress,
[in] ULONG64 Offset,
[in] SIZE_T ViewSize,
[in] ULONG AllocationType,
[in] ULONG PageProtection,
[in, out, optional] MEM_EXTENDED_PARAMETER *ExtendedParameters,
[in] ULONG ParameterCount
);
Parámetros
[in] FileMapping
Identificador a una sección que se va a asignar al espacio de direcciones del proceso especificado.
[in] Process
Identificador de un proceso en el que se asignará la sección.
[in, optional] BaseAddress
Dirección base deseada de la vista. La dirección se redondea hacia abajo hasta el límite de 64 k más cercano.
Nota
Si este parámetro es NULL, el sistema elige la dirección base.
Si BaseAddress no es NULL, cualquier MEM_ADDRESS_REQUIREMENTS proporcionado debe constar de todos los ceros.
[in] Offset
Desplazamiento desde el principio de la sección. Debe estar alineado a 64 000.
[in] ViewSize
Número de bytes que se van a asignar. Un valor de cero (0) especifica que se va a asignar toda la sección.
El tamaño siempre debe ser un múltiplo del tamaño de página.
[in] AllocationType
Tipo de asignación de memoria. Este parámetro puede ser cero (0) o uno de los valores siguientes.
Valor | Significado |
---|---|
|
Asigna una vista reservada. |
|
Reemplaza un marcador de posición por una vista asignada. Solo se admiten vistas de sección con respaldo pf/datos (sin imágenes, memoria física, etc.). Al reemplazar un marcador de posición, BaseAddress y ViewSize deben coincidir exactamente con los del marcador de posición y cualquier estructura de MEM_ADDRESS_REQUIREMENTS proporcionada debe estar formada por todos los ceros.
Después de reemplazar un marcador de posición por una vista asignada, para liberar esa vista asignada a un marcador de posición, vea el parámetro UnmapFlags de UnmapViewOfFileEx y UnmapViewOfFile2. Un marcador de posición es un tipo de región de memoria reservada. Los requisitos de alineación de 64 000 en Offset y BaseAddress no se aplican cuando se especifica esta marca. |
|
Asigna una vista de página grande. Esta marca especifica que la vista se debe asignar mediante la compatibilidad con páginas grandes. El tamaño de la vista debe ser un múltiplo del tamaño de una página grande notificada por la función GetLargePageMinimum y el objeto de asignación de archivos debe haberse creado con la opción SEC_LARGE_PAGES . Si proporciona un valor distinto de NULL para el parámetro BaseAddress , el valor debe ser un múltiplo de GetLargePageMinimum. |
[in] PageProtection
Protección de página deseada.
En el caso de los objetos de asignación de archivos creados con el atributo SEC_IMAGE , el parámetro PageProtection no tiene ningún efecto y debe establecerse en cualquier valor válido, como PAGE_READONLY.
[in, out, optional] ExtendedParameters
Puntero opcional a uno o varios parámetros extendidos de tipo MEM_EXTENDED_PARAMETER. Cada uno de esos valores de parámetro extendidos puede tener un campo Type de MemExtendedParameterAddressRequirements o MemExtendedParameterNumaNode. Si no se proporciona ningún parámetro extendido MemExtendedParameterNumaNode , el comportamiento es el mismo que para las funciones VirtualAlloc/MapViewOfFile (es decir, el nodo NUMA preferido para las páginas físicas se determina en función del procesador ideal del subproceso que accede primero a la memoria).
[in] ParameterCount
Número de parámetros extendidos a los que apunta ExtendedParameters.
Valor devuelto
Devuelve la dirección base de la vista asignada, si se ejecuta correctamente. De lo contrario, devuelve NULL y el estado de error extendido está disponible mediante GetLastError.
Comentarios
Esta API ayuda a admitir juegos de alto rendimiento y aplicaciones de servidor, que tienen requisitos concretos para administrar su espacio de direcciones virtual. Por ejemplo, asignar memoria encima de una región reservada previamente; esto es útil para implementar un búfer de anillo de ajuste automático. Y asignar memoria con alineación específica; por ejemplo, para permitir que la aplicación confirme regiones grandes o enormes asignadas a páginas a petición.
Ejemplos
Para obtener un ejemplo de código, vea Escenario 1 en VirtualAlloc2.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 10, versión 1803 [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2016 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | memoryapi.h (incluye Windows.h) |
Library | onecore.lib |
Archivo DLL | Kernel32.dll |
Vea también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de