LocalAlloc
La función LocalAlloc reserva el número de bytes de memoria especificados desde el montón. En el entorno lineal del API Win32, no hay diferencias entre el montón local y el global.
Sintaxis
HLOCAL LocalAlloc( UINT uFlags, // atributos de memoria UINT uBytes // número de bytes a reservar );
Parámetros:
uFlags: especifica el modo de reservar la memoria. Si se especifica cero, el valor por defecto es LMEM_FIXED. Excepto para las combinaciones incompatibles que se comentan específicamente, se puede especificar cualquier combinación de las banderas siguientes. Para indicar si la función debe reservar memoria fija o móvil, especificar uno de las seis primeras banderas:
Bandera | Significado |
---|---|
LMEM_FIXED | Reserva memoria fija. Esta bandera no se puede combinar con LMEM_MOVEABLE o LMEM_DISCARDABLE. El valor de retorno es un puntero al bloque de memoria. Para acceder a la memoria, el proceso tan sólo debe hacer un casting del valor de retorno al puntero adecuado. |
LMEM_MOVEABLE | Reserva memoria móvil. Esta bandera no se puede combinar con LMEM_FIXED. El valor de retorno es un manipulador al objeto de memoria. Este manipulador es un valor de 32 bit privado para el proceso que lo ha obtenido. Para convertir este manipulador en un puntero se usa la función LocalLock. |
LPTR | Combina las banderas LMEM_FIXED y LMEM_ZEROINIT. |
LHND | Combina las banderas LMEM_MOVEABLE y LMEM_ZEROINIT. |
NONZEROLHND | Equivale a la bandera LMEM_MOVEABLE. |
NONZEROLPTR | Equivale a la bandera LMEM_FIXED. |
LMEM_DISCARDABLE | Reserva memoria descartable. Esta bandera no puede combinarse con LMEM_FIXED. Algunas aplicaciones basadas en Win32 pueden ignorar esta opción. |
LMEM_NOCOMPACT | No compacta o descarta memoria para satisfacer una petición de memoria. |
LMEM_NODISCARD | No descarta memoria para satisfacer una petición de memoria. |
LMEM_ZEROINIT | Inicializa el contenido de la memoria con ceros. |
uBytes: especifica el número de bytes a reservar. Si este parámetro es cero y el parámetro uFlags especifica la bandera LMEM_MOVEABLE, la función devuelve un manipulador a un objeto de memoria que está marcado como descartado.
Valor de retorno
Si la función tiene éxito, el valor de retorno es el manipulador del nuevo objeto de memoria creado.
Si la función falla, el valor de retorno es NULL. Para obtener información más detallada sobre el error, llamar a la función GetLastError.
Observaciones
Si el montón no contiene suficiente espacio libre de memoria para satisfacer la petición, LocalAlloc devuelve NULL.
Las funciones GlobalAlloc y LocalAlloc están limitadas a un total de 65.536 manipuladores de memoria GMEM_MOVEABLE y LMEM_MOVEABLE por proceso. Esta limitación no se aplica a memoria GMEM_FIXED o LMEM_FIXED.
Si la función tiene éxito, reserva al menos la cantidad pedida. Si la cantidad reservada es mayor que la pedida, el proceso puede usar la totalidad de la reservada. Para determinar en número de bytes actualmente reservados, usar la función LocalSize.