en:docs:win16:api:kernel:localalloc

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
en:docs:win16:api:kernel:localalloc [2023/05/01 10:42] – created prokusheven:docs:win16:api:kernel:localalloc [2026/02/25 08:48] (current) prokushev
Line 1: Line 1:
 {{page>en:templates:win16api}} {{page>en:templates:win16api}}
  
-======  ======+====== LocalAlloc ======
  
 ===== Brief ===== ===== Brief =====
 +
 +Allocates a block of memory from the local heap of the current data segment.
  
 ===== Syntax ===== ===== Syntax =====
 +<code c>
 +HLOCAL WINAPI LocalAlloc(
 +UINT uFlags,
 +UINT uBytes
 +);
 +</code>
  
 ===== Parameters ===== ===== Parameters =====
  
-===== Return Code =====+  * 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 ===== ===== Notes =====
  
-===== Example Code =====+  * 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 ==== ==== C Binding ====
 +<code c> 
 +HLOCAL hMem = LocalAlloc(LMEM_MOVEABLE | LMEM_ZEROINIT, 1024); 
 +HLOCAL hMem2 = LocalAlloc(LHND, 1024); 
 +</code>
 ==== MASM Binding ==== ==== MASM Binding ====
 +<code asm>
 +push 0042h ; LMEM_MOVEABLE | LMEM_ZEROINIT
 +push 0400h ; 1024 bytes
 +call LocalAlloc
 +</code>
  
 ===== See also ===== ===== See also =====
 +
 +[[LocalReAlloc]]
 +[[LocalFree]]
 +[[LocalLock]]
  
 {{page>en:templates:win16}} {{page>en:templates:win16}}