.. _glossary-u:

=============================
Memory Management Glossary: U
=============================

.. include:: alphabet.txt

.. glossary::

    unaligned

        .. aka:: *misaligned*.

        An :term:`address` is unaligned or misaligned if it does not
        comply with some :term:`alignment` constraint on it.

        For example, typically double precision floating point numbers
        occupy 8 :term:`byte (1)` and have an alignment of 4 bytes;
        that is, their address must be a multiple of four. If a
        program tries to access such a number using an address that is
        not a multiple of four, a :term:`bus error` may result,
        depending on the processor architecture and instruction used.

        .. opposite:: :term:`aligned <alignment>`.

        .. seealso:: :term:`alignment`, :term:`bus error`.

    unboxed

        Unboxed :term:`objects` are represented by an
        encoding of the data itself, and not by a :term:`pointer` to
        that data.

        Representations are typically chosen so that unboxed values
        are the same size as the pointer part of a :term:`boxed`
        object. Sometimes the value is :term:`tagged <tag>` to
        distinguish it from a boxed object. The entire object is
        duplicated when the object is passed around, so updates to it,
        if allowed, only affect one copy.

        .. similar:: :term:`immediate data`.

        .. opposite:: :term:`boxed`.

        .. bibref:: :ref:`Gudeman (1993) <GUDEMAN93>`.

    unclamped state

        .. mps:specific::

            One of the three states an :term:`arena` can be in (the
            others being the :term:`clamped state` and the
            :term:`parked state`). In the unclamped state, object
            motion and other background activity may occur. Call
            :c:func:`mps_arena_release` to put an arena into the
            unclamped state.

    undead

        An undead object is an :term:`object` that cannot be proven to
        be :term:`dead` by the :term:`garbage collector`, but whose
        :term:`liveness <live>` is dubious.

        For example, an :term:`ambiguous reference` to an object on a
        :term:`page` may mark the entire page as :term:`reachable`. No
        further data is collected about that page. The other objects
        on the page will survive, even though their reachability has
        not been determined. They are *undead*.

    unmapped

        .. aka:: *free*.

        A range of :term:`virtual addresses` is said
        to be *unmapped* (*free* on Windows) if there is no
        :term:`physical memory (2)` associated with the range.

        An unmapped range may or may not be :term:`reserved`.

        .. opposite:: :term:`mapped`.

    unreachable

        An :term:`object` is unreachable if there is no
        :term:`reference` chain to it from any :term:`root`.

        An object will become unreachable when the :term:`mutator`
        overwrites its last (direct or indirect) reference to the
        object.

        .. similar:: :term:`dead`.

        .. opposite:: :term:`reachable`, :term:`live`.

        .. seealso:: :term:`reachable`, :term:`garbage collection`.

    unsure reference

        .. see:: :term:`ambiguous reference`.

    unwrapped

        .. aka:: *raw*.

        A value is *unwrapped* or *raw* if it is not encoded with type
        information.

        In a dynamically-typed language, the compiler may sometimes be
        able to pick a more compact or efficient representation for a
        value if it can prove that the type can be determined at
        compile-time. This is a particularly useful optimization for
        numeric values such as integers or floats.

        .. opposite:: :term:`wrapped`.

        .. seealso:: :term:`boxed`, :term:`tag`, :term:`value object`.

        .. bibref:: :ref:`Gudeman (1993) <GUDEMAN93>`.

    use after free

        .. see:: :term:`premature free`.