{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,3,29]],"date-time":"2026-03-29T14:52:45Z","timestamp":1774795965598,"version":"3.50.1"},"reference-count":41,"publisher":"Emerald","issue":"4","content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":[],"published-print":{"date-parts":[[2015,1,19]]},"abstract":"<jats:p>Modular heap analysis techniques analyze a program by computing summaries for every procedure in the program that describes its effects on an input heap, using pre-computed summaries for the called procedures. In this article, we focus on a family of modular heap analyses that summarize a procedure\u2019s heap effects using a context-independent, shape-graph-like summary that is agnostic to the aliasing in the input heap. The analyses proposed by Whaley, Salcianu and Rinard, Buss et al., Lattner et al. and Cheng et al. belong to this family. These analyses are very efficient. But their complexity and the absence of a theoretical formalization and correctness proofs makes it hard to produce correct extensions and modifications of these algorithms (whether to improve precision or scalability or to compute more information). We present a modular heap analysis framework that generalizes these four analyses. We formalize our framework as an abstract interpretation and establish the correctness and termination guarantees. We formalize the four analyses as instances of the framework. The formalization explains the basic principle behind such modular analyses and simplifies the task of producing extensions and variations of such analyses.<\/jats:p>\n                  <jats:p>We empirically evaluate our framework using several real-world C\u266f applications, under six different configurations for the parameters, and using three client analyses. The results show that the framework offers a wide range of analyses having different precision and scalability.<\/jats:p>","DOI":"10.1561\/2500000020","type":"journal-article","created":{"date-parts":[[2015,1,21]],"date-time":"2015-01-21T03:55:46Z","timestamp":1421812546000},"page":"269-381","source":"Crossref","is-referenced-by-count":5,"title":["A Framework For Efficient Modular Heap Analysis"],"prefix":"10.1561","volume":"1","author":[{"given":"Ravichandhran","family":"Madhavan","sequence":"first","affiliation":[{"name":"EPFL, Switzerland"}]},{"given":"G.","family":"Ramalingam","sequence":"additional","affiliation":[{"name":"Microsoft Research, India"}]},{"given":"Kapil","family":"Vaswani","sequence":"additional","affiliation":[{"name":"Microsoft Research, India"}]}],"member":"140","published-online":{"date-parts":[[2015,1,19]]},"reference":[{"key":"2026032910221128300_ref001","first-page":"243","article-title":"Strictly declarative specification of sophisticated points-to analyses","volume-title":"OOPSLA","author":"Bravenboer","year":"2009"},{"key":"2026032910221128300_ref002","first-page":"234","article-title":"Flexible pointer analysis using assign-fetch graphs","volume-title":"SAC","author":"Buss","year":"2008"},{"issue":"11","key":"2026032910221128300_ref003","doi-asserted-by":"crossref","first-page":"921","DOI":"10.1016\/j.scico.2009.08.002","article-title":"A novel analysis space for pointer analysis and its application for bug finding","volume":"75","author":"Buss","year":"2010","journal-title":"Sci. Comput. Program."},{"key":"2026032910221128300_ref004","doi-asserted-by":"crossref","first-page":"289","DOI":"10.1145\/1480881.1480917","article-title":"Compositional shape analysis by means of bi-abduction","volume-title":"POPL","author":"Calcagno","year":"2009"},{"key":"2026032910221128300_ref005","first-page":"133","article-title":"Relevant context inference","volume-title":"POPL","author":"Chatterjee","year":"1999"},{"key":"2026032910221128300_ref006","first-page":"57","article-title":"Modular interprocedural pointer analysis using access paths: design, implementation, and evaluation","volume-title":"PLDI","author":"Cheng","year":"2000"},{"issue":"4","key":"2026032910221128300_ref007","doi-asserted-by":"crossref","first-page":"511","DOI":"10.1093\/logcom\/2.4.511","article-title":"Abstract interpretation frameworks","volume":"2","author":"Cousot","year":"1992","journal-title":"J. Log. Comput."},{"key":"2026032910221128300_ref008","first-page":"159","article-title":"Modular static program analysis","volume-title":"CC","author":"Cousot","year":"2002"},{"key":"2026032910221128300_ref009","first-page":"35","article-title":"Unification-based pointer analysis with directional assignments","volume-title":"PLDI","author":"Das","year":"2000"},{"key":"2026032910221128300_ref010","first-page":"665","article-title":"Scalable flow-sensitive pointer analysis for java with strong updates","volume-title":"ECOOP","author":"De","year":"2012"},{"key":"2026032910221128300_ref011","first-page":"567","article-title":"Precise and compact modular procedure summaries for heap manipulating programs","volume-title":"PLDI","author":"Dillig","year":"2011"},{"key":"2026032910221128300_ref012","first-page":"188","article-title":"Bottom-up shape analysis","volume-title":"SAS","author":"Gulavani","year":"2009"},{"key":"2026032910221128300_ref013","first-page":"289","article-title":"Flow-sensitive pointer analysis for millions of lines of code","volume-title":"CGO","author":"Hardekopf","year":"2011"},{"key":"2026032910221128300_ref014","first-page":"5:1","article-title":"A relational approach to interprocedural shape analysis","volume-title":"ACM Trans. Program. Lang. Syst.","author":"Jeannet","year":"2010"},{"key":"2026032910221128300_ref015","first-page":"48","article-title":"Effect analysis for programs with callbacks","volume-title":"VSTTE","author":"Kneuss","year":"2013"},{"key":"2026032910221128300_ref016","first-page":"125","article-title":"The interprocedural coincidence theorem","volume-title":"CC","author":"Knoop","year":"1992"},{"key":"2026032910221128300_ref017","volume-title":"Macroscopic Data Structure Analysis and Operations","author":"Lattner","year":"2005"},{"key":"2026032910221128300_ref018","first-page":"129","article-title":"Automatic pool allocation: improving performance by controlling data structure layout in the heap","volume-title":"PLDI","author":"Lattner","year":"2005"},{"key":"2026032910221128300_ref019","first-page":"278","article-title":"Making context-sensitive points-to analysis with heap cloning practical for the real world","volume-title":"PLDI","author":"Lattner","year":"2007"},{"key":"2026032910221128300_ref020","volume-title":"Program Analysis Using Binary Decision Diagrams","author":"Lhot\u00e1k","year":"2006"},{"key":"2026032910221128300_ref021","first-page":"3","article-title":"Points-to analysis with efficient strong updates","volume-title":"POPL","author":"Lhot\u00e1k","year":"2011"},{"key":"2026032910221128300_ref022","first-page":"279","article-title":"Efficient computation of parameterized pointer information for interprocedural analyses","volume-title":"SAS","author":"Liang","year":"2001"},{"key":"2026032910221128300_ref023","first-page":"590","article-title":"Scaling abstraction refinement via pruning","volume-title":"PLDI","author":"Liang","year":"2011"},{"key":"2026032910221128300_ref024","first-page":"7","article-title":"Purity analysis: An abstract interpretation formulation","volume-title":"SAS","author":"Madhavan","year":"2011"},{"key":"2026032910221128300_ref025","first-page":"370","article-title":"Modular heap analysis for higher-order programs","volume-title":"SAS","author":"Madhavan","year":"2012"},{"key":"2026032910221128300_ref026","first-page":"513","article-title":"A correspondence between two approaches to interprocedural analysis in the presence of join","volume-title":"ESOP","author":"Mangal","year":"2014"},{"key":"2026032910221128300_ref027","first-page":"41","article-title":"Programming paradigm driven heap analysis","volume-title":"CC","author":"Marron","year":"2012"},{"key":"2026032910221128300_ref028","first-page":"165","article-title":"Bottom-up and top-down context-sensitive summary-based pointer analysis","volume-title":"SAS","author":"Nystrom","year":"2004"},{"key":"2026032910221128300_ref029","first-page":"50","article-title":"Safe programmable speculative parallelism","volume-title":"PLDI","author":"Prabhu","year":"2010"},{"key":"2026032910221128300_ref030","first-page":"284","article-title":"Interprocedural shape analysis for cutpoint-free programs","volume-title":"SAS","author":"Rinetzky","year":"2005"},{"key":"2026032910221128300_ref031","first-page":"105","article-title":"Parametric shape analysis via 3-valued logic","volume-title":"POPL","author":"Sagiv","year":"1999"},{"key":"2026032910221128300_ref032","volume-title":"Pointer analysis and its applications for java programs","author":"Salcianu","year":"2001"},{"key":"2026032910221128300_ref033","first-page":"199","article-title":"Purity and side effect analysis for java programs","volume-title":"VMCAI","author":"Salcianu","year":"2005"},{"key":"2026032910221128300_ref034","first-page":"189","article-title":"Two approaches to interprocedural data flow analysis","volume-title":"Program Flow Analysis: Theory and Applications","author":"Sharir","year":"1981"},{"key":"2026032910221128300_ref035","first-page":"245","article-title":"Using datalog for fast and easy program analysis","volume-title":"Datalog","author":"Smaragdakis","year":"2010"},{"key":"2026032910221128300_ref036","first-page":"17","article-title":"Pick your contexts well: understanding object-sensitivity","volume-title":"POPL","author":"Smaragdakis","year":"2011"},{"key":"2026032910221128300_ref037","first-page":"50","article-title":"Introspective analysis: context-sensitivity, across the board","volume-title":"PLDI","author":"Smaragdakis","year":"2014"},{"key":"2026032910221128300_ref038","first-page":"32","article-title":"Points-to analysis in almost linear time","volume-title":"POPL","author":"Steensgaard","year":"1996"},{"key":"2026032910221128300_ref039","unstructured":"Wala, T. J.\n          \n          Watson libraries for program analysis. URL https:\/\/github.com\/wala\/WALA."},{"key":"2026032910221128300_ref040","first-page":"187","article-title":"Compositional pointer and escape analysis for java programs","volume-title":"OOPSLA","author":"Whaley","year":"1999"},{"key":"2026032910221128300_ref041","first-page":"27","article-title":"On abstraction refinement for program analyses in datalog","volume-title":"PLDI","author":"Zhang","year":"2014"}],"container-title":["Foundations and Trends\u00ae in Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.emerald.com\/ftpgl\/article-pdf\/1\/4\/269\/11025339\/2500000020en.pdf","content-type":"application\/pdf","content-version":"vor","intended-application":"syndication"},{"URL":"https:\/\/www.emerald.com\/ftpgl\/article-pdf\/1\/4\/269\/11025339\/2500000020en.pdf","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,3,29]],"date-time":"2026-03-29T14:22:22Z","timestamp":1774794142000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.emerald.com\/ftpgl\/article\/1\/4\/269\/1326561\/A-Framework-For-Efficient-Modular-Heap-Analysis"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2015,1,19]]},"references-count":41,"journal-issue":{"issue":"4","published-print":{"date-parts":[[2015,1,19]]}},"URL":"https:\/\/doi.org\/10.1561\/2500000020","relation":{},"ISSN":["2325-1107","2325-1131"],"issn-type":[{"value":"2325-1107","type":"print"},{"value":"2325-1131","type":"electronic"}],"subject":[],"published":{"date-parts":[[2015,1,19]]}}}