{{page>en:templates:win16api}}
====== LocalAlloc ======
===== Brief =====
Allocates a block of memory from the local heap of the current data segment.
===== Syntax =====
HLOCAL WINAPI LocalAlloc(
UINT uFlags,
UINT uBytes
);
===== Parameters =====
* uFlags – Allocation attributes. Common flags:
* LMEM_FIXED (0x0000) – Allocates fixed memory; the return value is a pointer.
* LMEM_MOVEABLE (0x0002) – Allocates movable memory; returns a handle.
* LMEM_ZEROINIT (0x0040) – Initializes the memory to zero.
* LMEM_DISCARDABLE (0x0F00) – Makes the block discardable (only with LMEM_MOVEABLE).
* LMEM_NOCOMPACT (0x0010) – Prevents heap compaction for this allocation.
* LMEM_NODISCARD (0x0020) – Prevents discarding of other blocks.
Shorthands: LHND (LMEM_MOVEABLE | LMEM_ZEROINIT), LPTR (LMEM_FIXED | LMEM_ZEROINIT).
* uBytes – Number of bytes to allocate. If zero and LMEM_MOVEABLE is set, returns a handle to a discarded object.
===== Return Value =====
If successful, returns a handle to the allocated object. For LMEM_FIXED, this handle is actually a pointer.
Returns NULL on failure. Call GetLastError for extended error information.
===== Notes =====
* For movable blocks, use LocalLock to obtain a pointer before accessing the memory.
* The internal lock count of a new block is zero.
===== Example Code =====
==== C Binding ====
HLOCAL hMem = LocalAlloc(LMEM_MOVEABLE | LMEM_ZEROINIT, 1024);
HLOCAL hMem2 = LocalAlloc(LHND, 1024);
==== MASM Binding ====
push 0042h ; LMEM_MOVEABLE | LMEM_ZEROINIT
push 0400h ; 1024 bytes
call LocalAlloc
===== See also =====
[[LocalReAlloc]]
[[LocalFree]]
[[LocalLock]]
{{page>en:templates:win16}}