We consider the problem of computing the intersection (meet) of heap
abstractions, namely the common value of a set of abstract memory
stores. This problem proves to have many applications in shape
analysis, such as interpreting program conditions, refining abstract
configurations, reasoning about procedures, and proving temporal
properties of heap-manipulating programs. However, computing the meet
of heap abstractions is non-trivial; its definition as the least upper
bound of all lower bounds does not lead to an effective algorithm.
We show that the problem of computing meet is computationally hard.
We describe a constructive formulation of meet that is based on
finding certain relations between abstract heap objects. Enumerating
those relations is reduced to finding constrained matchings on
graphs. We describe a prototype implementation of the algorithm for
proving temporal heap properties. We applied the analysis to infer
rather precise compile-time garbage collection information on several
small but interesting Java programs, and obtained an empirical
evaluation of the meet algorithm.