CONCEPT
        memory
        swapping

DESCRIPTION

        TODO: This is out of date. Also document the relation with reset

        (Collected from the Changelogs of the driver source)

        The swapping algorithm has been changed. A test is done for
        every object, comparing to a time stamp. If the object hasn't
        been touched for a while, it could be subject for swapping.
        Here comes the new thing: the function 'clean_up()' will be
        called in the object. If the object still remains, the old
        swapping algorithm will continue. That means that objects that
        would never be subject to swapping (cloned objects) now have a
        chance to self-destruct. It also means that rooms that
        contains no important data can self-destruct. Self-destruction
        saves more memory than swapping, as swapping only frees the
        program code, while self-destruction also frees the internal
        object representation.

        The call of clean_up() has been modified. There is a constant
        in config.h that defines how long time until clean_up is
        called in an object. This call is independent of reset() and
        swapping. It is recommended that the swapping time is
        something short, like 10 minutes to 30 minutes, while the time
        to clean_up is longer.

        Fixed several bugs in the swap/reset/clean_up logic.
        Recommended values are that the swap time is short (less than
        30 minutes), and that reset time is medium (aprox 60 minutes),
        and that time to clean_up is long (greater than 1.5h hours).
        Any feedback of how to best tune these values are welcome. The
        call of reset will be done once, and not yet again until the
        object has been touched. This enables reset'ed objects to stay
        swapped out. If you have a mudlib that has no ojbects that
        defines 'clean_up', then you may better define this time as 0,
        which means never call clean_up (and thus never swap the
        object in needlessly). A well implemented usage of clean_up is
        better than the swap algorithm, as even cloned objects can be
        cleaned up and a self destruction is more efficient than
        swapping (memory wise).

        Changed mechanism of calling clean_up() slightly. Only objects
        that defines the function will be called. And, only clean_up()
        that returns non-zero will be called again. This will minimize
        calls of clean_up(), while still cost very litte to maintain.

        clean_up() now gets a flag as argument, which will be non-zero
        if the the program of this object is used for inheritance by
        other objects.

SEE ALSO
        clean_up(A), slow_shut_down(M), quota_demon(M), malloc(D)
