When to avoid using dynamic allocation

Do not use dynamic allocation in the following types of programs, because their characteristics, combined with a dynamic allocation request, can cause the program to end abnormally:
  • Programs running in cross memory mode.

    For further information on the use of cross memory services, see z/OS MVS Programming: Extended Addressability Guide.

  • Programs running under an interruption request block (IRB).

    Requesting dynamic allocation functions in routines that run under an IRB and issue OPEN, OPENJ, CLOSE, EOV, or FEOV, or any other service that enqueues on SYSZTIOT can cause a X'138' abend.

  • Programs that get control during the start of the job entry subsystem, such as installation exits or other programs invoked during job entry subsystem initialization.
  • Programs that get control before batch allocation is complete, such as installation exits that get control prior to batch allocation or ASCRE address space initialization routines.
  • User exits for OPEN/CLOSE/EOV, or for any other routines that enqueue on SYSZTIOT.
  • Multitasking programs in which one task issues the DYNALLOC macro with the S99TIONQ bit on in S99FLAG2, and other tasks issue the DYNALLOC, OPEN, OPENJ, CLOSE, EOV, FEOV, or LOCATE macros.
  • MVS™ command installation exits.

    For further information about this restriction and about command installation exits, see z/OS MVS Installation Exits.

Additional requirements and restrictions for dynamic allocation are outlined in Programming considerations for using the DYNALLOC macro.