VMS Help  —  CRTL  malloc
    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.
Close Help