Allocates an area of memory. These functions are AST-reentrant.
Format
#include <stdlib.h>
void *malloc (size_t size);
1 – Function Variants
The malloc function has variants named _malloc32 and _malloc64
for use with 32-bit and 64-bit pointer sizes, respectively.
2 – Argument
size
The total number of bytes to be allocated.
3 – Description
The malloc function allocates a contiguous area of memory whose
size, in bytes, is supplied as an argument. The space is not
initialized.
NOTE
The malloc routines call the system routine LIB$VM_MALLOC.
Because LIB$VM_MALLOC is designed as a general-purpose
routine to allocate memory, it is called upon in a wide
array of scenarios to allocate and reallocate blocks
efficiently. The most common usage is the management of
smaller blocks of memory, and the most important aspect of
memory allocation under these circumstances is efficiency.
LIB$VM_MALLOC makes use of its own free space to satisfy
requests, once the heap storage is consumed by splitting
large blocks and merging adjacent blocks. Memory can still
become fragmented, leaving unused blocks. Once heap storage
is consumed, LIB$VM_MALLOC manages its own free space and
merged blocks to satisfy requests, but varying sizes of
memory allocations can cause blocks to be left unused.
Because LIB$VM_MALLOC cannot be made to satisfy all
situations in the best possible manner, perform your own
memory management if you have special memory usage needs.
This assures the best use of memory for your particular
application.
The OpenVMS Programming Concepts Manual explains the several
memory allocation routines that are available. They are
grouped into three levels of hierarchy:
1. At the highest level are the RTL Heap Management Routines
LIB$GET_VM and LIB$FREE_VM, which provide a mechanism
for allocating and freeing blocks of memory of arbitrary
size. Also at this level are the routines based on the
concept of zones, such as LIB$CREATE_VM_ZONE, and so on.
2. At the next level are the RTL Page Management routines
LIB$GET_VM_PAGE and LIB$FREE_VM_PAGE, which allocate a
specified number of contiguous pages.
3. At the lowest level are the Memory Management System
Services, such as $CRETVA and $EXPREG, that provide
extensive control over address space allocation. At this
level, you must manage the allocation precisely.
The maximum amount of memory allocated at once is limited to
0xFFFFD000.
4 – Return Values
x The address of the first byte, which
is aligned on a quadword boundary
(Alpha only) or an octaword boundary
(Integrity servers(ONLY)) .
NULL Indicates that the function is unable to
allocate enough memory. errno is set to
ENOMEM.