.. _glossary-h: ============================= Memory Management Glossary: H ============================= .. include:: alphabet.txt .. glossary:: handle A handle is an object that represents a resource. Handles are used when the resource cannot be represented directly. For example, a file handle is an object passed between a process and the OS in order to access a file, because the file itself cannot be represented. .. relevance:: In memory management, a handle is an object that represents another :term:`object`. Handles are usually used because the object itself needs to be :term:`moved ` in :term:`memory (2)`, or even :term:`swapped out` to disk. The program therefore cannot know the :term:`address` of the object. For example, Apple's Classic Mac OS made extensive use of handles in its `heap management `_ to avoid problems due to :term:`fragmentation`. If the Classic Mac OS Memory Manager could not satisfy a request for memory, it tried :term:`compacting ` the :term:`heap`: moving all the :term:`relocatable ` objects together to squeeze out gaps. It could do this because the program only had handles on the objects, and not their actual addresses. .. figure:: ../diagrams/handle.svg :align: center :alt: Diagram: Handle-based heap. Handle-based heap. .. similar:: :term:`pointer`. header .. see:: :term:`in-band header`. heap .. aka:: *free store*, *freestore*. The *heap* or *free store* is the :term:`memory (2)` area managed by :term:`dynamic allocation`. This use of *heap* is unconnected with the data structure used by the heapsort algorithm. heap allocation .. aka:: *dynamic allocation*. *Heap allocation* or *dynamic allocation* means run-time :term:`allocation ` and :term:`deallocation ` of :term:`memory (1)` in arbitrary order. Dynamic allocation is usually for :term:`objects` whose size, quantity, or :term:`lifetime` could not be determined at compile-time. It is necessary to implement modern data structures, such as recursive trees and full :term:`closures`. Objects on the :term:`heap` can be managed :term:`manually `, as in :term:`C`, or :term:`automatically `, as in :term:`Lisp` and :term:`Java`. .. opposite:: :term:`stack allocation`, :term:`static allocation`. .. seealso:: :term:`indefinite extent`. hit A hit is a successful lookup in any form of :term:`cache (3) `, most commonly at some level of a :term:`storage hierarchy`, such as a :term:`cache (1)` or :term:`virtual memory` system. .. opposite:: :term:`miss`. hit rate At any level of a :term:`storage hierarchy`, the hit rate is the proportion of accesses which :term:`hit`. .. opposite:: :term:`miss rate`. hosted In the :term:`C` programming language, a hosted implementation is one that provides all the features of the standard C library. .. opposite:: :term:`freestanding`. .. bibref:: :ref:`ISO/IEC 9899:1990 `, :ref:`ISO/IEC 9899:1999 `. hot .. mps:specific:: A :term:`variety` in which many MPS functions :term:`assert ` that their data structures are valid, but functions on the :term:`critical path` do not. Select it by defining :c:macro:`CONFIG_VAR_HOT`. Compare :term:`cool` and :term:`rash`. hot end .. opposite:: :term:`cold end` A :term:`control stack` has two ends: the oldest items are at the *cold end* and the newest items are at the *hot end*. Sometimes the hot end is called the "top" of the stack, but that is misleading when the stack grows downwards, as it does on common computing platforms. huge page .. aka:: *large page*, *superpage*. Some processor architectures support multiple :term:`page` sizes. This allows operating systems to better match the page size to the granularity of memory usage and so reduce the size of the :term:`page table`.