winbase.h


VirtualAlloc

La función VirtualFree libera o desasigna (o ambas) una región de páginas dentro del espacio de direcciones virtual del proceso que la llama.

Sintaxis

BOOL VirtualFree(
    LPVOID lpAddress,  // dirección de la región de páginas asignadas
    DWORD dwSize,      // tamaño de la región
    DWORD dwFreeType   // tipo de operación de liberado
   );

Parámetros

lpAddress: puntero a la dirección base de la región de páginas a liberar. Si el parámetro dwFreeType incluye la bandera MEM_RELEASE, este parámetro debe ser la dirección base devuelta por la función VirtualAlloc cuando la región de páginas fue reservada.

dwSize: especifica el tamaño, en bytes, de la región a liberar. Si el parámetro dwFreeType incluye la bandera MEM_RELEASE flag, este parámetro debe ser cero. En otro caso, la región de páginas afectada incluye todas las páginas que contengan uno o más bytes en el rango desde el parámetro lpAddress a (lpAddress+dwSize). Esto significa que un rango de dos bytes a caballo en un límite de página hace que ambas páginas sean liberadas.

flAllocationType: especifica el tipo de operación de liberación. Se puede especificar una, pero no ambas de las banderas siguientes:

Bandera Significado
MEM_DECOMMIT Desasigna una región especificada de páginas asignadas.
Un intento de desasignar una página no asignada no producirá que la función falle. Esto significa que un rango de páginas asignadas o no asignadas puede ser desasignado sin preocuparse de que se produzca un fallo.
MEM_RELEASE Libera la región especificadas de páginas reservadas. Si se especifica esta bandera, el parámetro dwSize debe ser cero, o la función fallará.

Valor de retorno

Si la función tiene éxito, el valor de retorno es distinto de cero.

Si la función falla, el valor de retorno es cero. Para obtener información más detallada sobre el error, llamar a la función GetLastError.

Observaciones

VirtualFree puede realizar las operaciones siguientes:

  • Desasigna una región de páginas asignadas o no asignadas.
  • Libera una región de páginas reservadas.
  • Desasigna y libera una región de páginas asignadas o no asignadas.

Para liberar una región de páginas, el rango de páginas completo debe estar en el mismo estado (todas reservadas o todas asignadas) y la región completa originalmente reservada por la función VirtualAlloc debe ser liberada a la vez. Si sólo una parte de las páginas de la región reservada originalmente están asignadas, primero se debe llamar a VirtualFree para desasignar las páginas asignadas y después llamar a VirtualFree de nuevo para liberar el bloque completo.

Las páginas que hayan sido liberardas son páginas libres disponibles para nuevas operaciones de acomodo. Los intentos de leer o escribir en una página libre provocan una excepción de violación de acceso.

VirtualFree puede desasignar una página no asignada; esto significa que un rango de páginas asignadas o no no asignadas puede ser desasignado sin tener que preocuparse sobre un posible fallo. Desasignar una página libera su almacenamiento físico, ya sea en memoria o en el fichero de paginación de disco. Si una página es desasignada pero no liberada, su estado cambia a reservado, y puede ser asignada de nuevo por una nueva llamada a VirtualAlloc. Intentos de leer o escribir en una página reservada producen una excepción de violación de acceso.

El estado actual del rango completo de páginas debe ser compatible con el tipo de operación de liberación especificado en el parámetro dwFreeType. En caso contrario, la función falla y ninguna página es liberada o desasignada.