Compartir a través de


Función HeapSize (heapapi.h)

Recupera el tamaño de un bloque de memoria asignado desde un montón por la función HeapAlloc o HeapReAlloc .

Sintaxis

SIZE_T HeapSize(
  [in] HANDLE  hHeap,
  [in] DWORD   dwFlags,
  [in] LPCVOID lpMem
);

Parámetros

[in] hHeap

Identificador del montón en el que reside el bloque de memoria. Este identificador lo devuelve la función HeapCreate o GetProcessHeap .

[in] dwFlags

Opciones de tamaño del montón. Al especificar el siguiente valor, se invalida el valor correspondiente especificado en el parámetro flOptions cuando se creó el montón mediante la función HeapCreate .

Valor Significado
HEAP_NO_SERIALIZE
0x00000001
No se usará el acceso serializado. Para obtener más información, vea la sección Comentarios.

Para asegurarse de que el acceso serializado está deshabilitado para todas las llamadas a esta función, especifique HEAP_NO_SERIALIZE en la llamada a HeapCreate. En este caso, no es necesario especificar además HEAP_NO_SERIALIZE en esta llamada de función.

Este valor no se debe especificar al acceder al montón de procesos. El sistema puede crear subprocesos adicionales dentro del proceso de la aplicación, como un controlador CTRL+C, que accede simultáneamente al montón del proceso.

[in] lpMem

Puntero al bloque de memoria cuyo tamaño obtendrá la función. Se trata de un puntero devuelto por la función HeapAlloc o HeapReAlloc . El bloque de memoria debe ser del montón especificado por el parámetro hHeap .

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es el tamaño solicitado del bloque de memoria asignado, en bytes.

Si la función produce un error, el valor devuelto es (SIZE_T)-1. La función no llama a SetLastError. Una aplicación no puede llamar a GetLastError para obtener información de error extendida.

Si el parámetro lpMem hace referencia a una asignación de montón que no está en el montón especificado por el parámetro hHeap , el comportamiento de la función HeapSize no está definido.

Comentarios

La serialización garantiza la exclusión mutua cuando dos o más subprocesos intentan asignar o liberar bloques simultáneamente del mismo montón. Hay un pequeño costo de rendimiento para la serialización, pero debe usarse siempre que varios subprocesos asignen y liberen memoria del mismo montón. Establecer el valor de HEAP_NO_SERIALIZE elimina la exclusión mutua en el montón. Sin serialización, dos o más subprocesos que usan el mismo identificador de montón podrían intentar asignar o liberar memoria simultáneamente, lo que probablemente causaría daños en el montón. Por lo tanto, el valor de HEAP_NO_SERIALIZE solo se puede usar de forma segura en las situaciones siguientes:

  • El proceso solo tiene un subproceso.
  • El proceso tiene varios subprocesos, pero solo un subproceso llama a las funciones del montón para un montón específico.
  • El proceso tiene varios subprocesos y la aplicación proporciona su propio mecanismo para la exclusión mutua a un montón específico.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado heapapi.h (incluye Windows.h)
Library Kernel32.lib
Archivo DLL Kernel32.dll

Vea también

Funciones del montón

HeapAlloc

HeapReAlloc

Funciones de administración de memoria

API de Vertdll disponibles en enclaves de VBS