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 |
---|---|
|
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 |