Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Most specifications of garbage collectors concentrate on the low-level
algorithmic details of {\em how} to find and preserve accessible objects.
Often, they focus on bit-level manipulations such as ``scanning stack
frames,'' ``marking objects,'' ``tagging data,'' {\em etc.} While these
details are important in some contexts, they often obscure the more
fundamental aspects of memory management: {\em what} objects are garbage and
{\em why}?
We develop a series of calculi that are just low-level enough that we can
express allocation and garbage collection, yet are sufficiently abstract that
we may formally prove the correctness of various memory management strategies.
By making the heap of a program syntactically apparent, we can specify memory
actions as rewriting rules that allocate values on the heap and automatically
dereference pointers to such objects when needed. This formulation permits
the specification of garbage collection as a relation that removes portions of
the heap without affecting the outcome of the evaluation.
Our high-level approach allows us to specify in a compact manner a wide
variety of memory management techniques, including standard trace-based
garbage collection ({\em i.e.}, the family of copying and mark/sweep
collection algorithms), generational collection, and type-based, tag-free
collection. Furthermore, since the definition of garbage is based on the {\em
semantics} of the underlying language instead of the conservative
approximation of inaccessibility, we are able to specify and prove the idea
that type inference can be used to collect some objects that are accessible
but never used.