The high-level memory management API consists of C macros and functions called in generated code and/or in application programs to allocate and free memory within the ASN1C run-time.
At the top level are a set of macro definitions that begin with the
    prefix 
    rtxMem. These are mapped to a set of
    similar functions that begin with the prefix 
    rtxMemHeap. A table showing this basic
    mapping is as follows: 
    
| Macro | Function | Description | 
|---|---|---|
              rtxMemAlloc
             | 
              
              rtxMemHeapAlloc
             | 
              Allocate memory | 
              rtxMemAllocZ
             | 
              
              rtxMemHeapAllocZ
             | 
              Allocate and zero memory | 
              rtxMemRealloc
             | 
              
              rtxMemHeapRealloc
             | 
              Reallocate memory | 
              rtxMemFree
             | 
              
              rtxMemHeapFreeAll
             | 
              Free all memory in context | 
              rtxMemFreePtr
             | 
              
              rtxMemHeapFreePtr
             | 
              Free a specific memory block | 
See the ASN1C C/C++ Common Runtime Reference Manual for further details on these functions and macros.
It is possible to replace the high-level memory allocation
    functions with functions that implement a custom memory management
    scheme. This is done by implementing some (or all) of the C 
    rtxMemHeap functions defined in the
    following interface (note: a default implementation is shown that
    replaces the ASN1C memory manager with direct calls to the standard C
    run-time memory management functions):
   #include <stdlib.h>
   #include "rtxMemory.h"
   /* Create a memory heap */
   int rtxMemHeapCreate (void **ppvMemHeap) {
      return 0;
   }
   /* Allocate memory */
   void* rtxMemHeapAlloc (void **ppvMemHeap, size_t nbytes) {
      return malloc (nbytes);
   }
   /* Allocate and zero memory */
   void* rtxMemHeapAllocZ (void **ppvMemHeap, size_t nbytes) {
      return calloc (nbytes, 1);
   }
   /* Free memory pointer */
   void rtxMemHeapFreePtr (void **ppvMemHeap, void *mem_p) {
      free (mem_p);
   }
   /* Reallocate memory */
   void* rtxMemHeapRealloc (void **ppvMemHeap, void *mem_p, size_t nbytes) {
      return realloc (mem_p, nbytes);
   }
   /* Free heap memory, reset all heap variables. */
   void rtxMemHeapFreeAll (void **ppvMemHeap) {
      /* There is no analog in standard memory management. */
   }
   /* Free heap memory, reset all heap variables, and free heap structure if
      it was allocated. */
   void rtxMemHeapRelease (void **ppvMemHeap) {
      /* There is no analog in standard memory management. */
   }
      In most cases it is only necessary to implement the following functions:
rtxMemHeapAlloc
rtxMemHeapAllocZ
rtxMemHeapFreePtr
rtxMemHeapRealloc
There is no analog in standard memory management for ASN1C's 
    rtxMemFree macro (i.e. the 
    rtxMemHeapFreeAll function). The user is
    responsible for freeing all items in a generated ASN1C structure
    individually if standard memory management is used.
The 
    rtxMemHeapCreate and 
    rtxMemHeapRelease functions are
    specialized functions used when a special heap is to be used for
    allocation (for example, a static block within an embedded system). In
    this case, 
    rtxMemHeapCreate must set the 
    ppvMemHeap argument to point at the block
    of memory to be used. This will then be passed in to all of the other
    memory management functions for their use through the OSCTXT structure.
    The 
    rtxMemHeapRelease function can then be
    used to dispose of this memory when it is no longer needed.
To add these definitions to an application program, compile the C
    source file (it can have any name) and link the resulting object file 
    (.obj or 
    .o) in with the application.