SYNOPSIS
        void low_memory(int what, int limitvalue, int memory, int reservestate)

DESCRIPTION
        This efun is called when there is a (potential) low-memory situation.
        Two different limits for the amount of allocated memory can be
        configured: a soft limit and a hard limit.
        If the soft limit is exceeded, the driver calls low_memory() but does
        nothing else.
        If the hard limit is exceeded, the driver calls low_memory() as well,
        but initiates a garbage collection directly after the call.
        The efun is called as well directly before a user-initiated garbage
        collection is started.

        <what> denotes the type of limit which was exceeded:
        - NO_MALLOC_LIMIT_EXCEEDED   (0)
            No limit was exceeded, by a garbage collection was requested by a
            call to garbage_collection() and it will begin right after
            low_memory() returns.
        - SOFT_MALLOC_LIMIT_EXCEEDED (1)
            The soft limit was exceeded.
        - HARD_MALLOC_LIMIT_EXCEEDED (2)
            The hard limit was exceeded. A garbage collection will begin right
            after low_memory() returns.

        <limit> specifies the numerical value of the limit which was exceeded.
        It is 0 in case of NO_MALLOC_LIMIT_EXCEEDED.

        <memory> specifies the amount of allocated memory right now.

        <reservestate> specifies the current state of the memory reserves of
        the driver. The states of the 3 different reserves are OR'ed together.
        - USER_RESERVE_AVAILABLE   (1)
          The user reserve is available.
        - MASTER_RESERVE_AVAILABLE (2)
          The master reserve is available.
        - SYSTEM_RESERVE_AVAILABLE (4)
          The system reserve is available. 

        This efun might be used to inform users about the garbage collection
        and the expeced long lag.
        Another possibility is to initiate a garbage collection deliberately
        at a suitable time (e.g. during the following night) after the soft
        limit was hit.

REMARKS
        If in a low_memory condition when the memory reserves have been used
        already and they could not be re-allocated after a garbage collection
        slow_shut_down() is called instead of calling this function again.

HISTORY
        Introduced in 3.3.719

SEE ALSO
        debug_info(E), garbage_collection(E), slow_shut_down(M), memory(C)
        malloc(D)
