// C syntax #include <vmm.h> ULONG EXTERN _HeapAllocate(ULONG nbytes, ULONG flags); ; assembler syntax include vmm.inc VMMcall _HeapAllocate, <nbytes, flags> or eax, eax ; zero if error jz not_allocated mov [Address], eax ; address of memory block
Allocates a block of memory from the system heap. Uses EAX, ECX, EDX, and flags.
nbytes
Specifies the size in bytes of the block to allocate. Must not be zero.
flags
Allocation flags. Can be zero or more of these values.
Value | Meaning |
HEAPLOCKEDIFDP | Allocates a memory block in locked memory only if MS-DOS or BIOS functions are used for paging. Otherwise, the memory block is allocated in pageable memory. |
HEAPINIT | Allocates a memory block that is automatically freed after initialization. This value can only be specified during initialization. |
HEAPSWAP | Allocates a memory block in pageable memory. |
HEAPZEROINIT | Fills the memory block with zeros. If this value is not given, the initial content of the memory block is undefined. |
All other values are reserved.
Only one of the values HEAPINIT, HEAPSWAP, or HEAPLOCKEDIFDP can be specified. If none of these values is specified, the block is allocated in fixed memory.
This service aligns allocated block on doubleword boundaries, however, the block size does not have to be a multiple of 4.
Since the system offers no protection on the heap, virtual devices must provide their own protection to prevent overrunning allocated blocks.
The system offers no compaction on the heap; all memory blocks on the heap are fixed. Virtual devices must not to use the heap in such a way as to severely fragment it.
See also _HeapFree, _HeapReAllocate