{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,6,19]],"date-time":"2026-06-19T18:14:53Z","timestamp":1781892893034,"version":"3.54.5"},"reference-count":44,"publisher":"Cambridge University Press (CUP)","issue":"1","license":[{"start":{"date-parts":[[2008,11,7]],"date-time":"2008-11-07T00:00:00Z","timestamp":1226016000000},"content-version":"unspecified","delay-in-days":4694,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[1996,1]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>We present a comprehensive analysis of all the components of creation, access and disposal of heap-allocated and stack-allocated activation records. Among our results are:<\/jats:p>\n                  <jats:p>\u2022Although stack frames are known to have a better cache read-miss rate than heap frames, our simple analytical model (backed up by simulation results) shows that the difference is too trivial to matter.<\/jats:p>\n                  <jats:p>\u2022The cache write-miss rate of heap frames is very high; we show that a variety of miss-handling strategies (exemplified by specific modern machines) can give good performance, but not all can.<\/jats:p>\n                  <jats:p>\u2022Stacks restrict the flexibility of closure representations (for higher-order functions) in important (and costly) ways.<\/jats:p>\n                  <jats:p>\u2022The extra load placed on the garbage collector by heap-allocated frames is small.<\/jats:p>\n                  <jats:p>\u2022The demands of modern programming languages make stacks complicated to implement efficiently and correctly.<\/jats:p>\n                  <jats:p>Overall, the execution cost of stack-allocated and heap-allocated frames is similar; but heap frames are simpler to implement and allow very efficient first-class continuations.<\/jats:p>","DOI":"10.1017\/s095679680000157x","type":"journal-article","created":{"date-parts":[[2008,11,7]],"date-time":"2008-11-07T11:11:24Z","timestamp":1226056284000},"page":"47-74","source":"Crossref","is-referenced-by-count":28,"title":["Empirical and analytic study of stack versus heap cost for languages with closures"],"prefix":"10.1017","volume":"6","author":[{"given":"Andrew W.","family":"Appel","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Zhong","family":"Shao","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2008,11,7]]},"reference":[{"key":"S095679680000157X_ref024","first-page":"66","volume-title":"Proc. ACM SIGPLAN Conf. on Programming Language Design and Implementation","author":"Hieb","year":"1990"},{"key":"S095679680000157X_ref036","first-page":"150","volume-title":"Proc. ACM Conf. on Lisp and Functional Programming","author":"Shao","year":"1994"},{"key":"S095679680000157X_ref019","unstructured":"Doligez D. and Gonthier G. (1994) Re: stack scanning for generational g.c. Email message <9403041606.AA07877@lix.polytechnique.fr>."},{"key":"S095679680000157X_ref001","first-page":"117","volume-title":"IEEE COMPCON","author":"Allen","year":"1993"},{"key":"S095679680000157X_ref037","volume-title":"Technical Report AI-TR-474","author":"Steele","year":"1978"},{"key":"S095679680000157X_ref034","volume-title":"Technical memorandum","author":"Reppy","year":"1993"},{"key":"S095679680000157X_ref012","unstructured":"Baker H. G. (1976) The buried binding and stale binding problems of LISP 1.5. Unpublished paper."},{"key":"S095679680000157X_ref030","first-page":"177","volume-title":"19th Ann. ACM Symp. on Principles of Programming Languages","author":"Leroy","year":"1992"},{"key":"S095679680000157X_ref027","first-page":"191","volume-title":"Proc. 20th Ann. Int. Symposium on Computer Architecture","author":"Jouppi","year":"1993"},{"key":"S095679680000157X_ref004","volume-title":"Compiling with Continuations","author":"Appel","year":"1992"},{"key":"S095679680000157X_ref003","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380190206"},{"key":"S095679680000157X_ref005","volume-title":"Technical Report CS-TR-459-94","author":"Appel","year":"1994"},{"key":"S095679680000157X_ref028","first-page":"219","article-title":"ORBIT: An optimizing compiler for Scheme","volume":"21","author":"Kranz","year":"1986","journal-title":"SIGPLAN Notices (Proc. Sigplan '86 Symp. on Compiler Construction)"},{"key":"S095679680000157X_ref033","first-page":"293","volume-title":"Proc. ACM SIGPLAN Conf. on Programming Language Design and Implementation","author":"Reppy","year":"1991"},{"key":"S095679680000157X_ref025","doi-asserted-by":"publisher","DOI":"10.1109\/2.16187"},{"key":"S095679680000157X_ref020","first-page":"163","volume-title":"18th Ann. ACM Symp. on Principles of Programming Languages","author":"Duba","year":"1991"},{"key":"S095679680000157X_ref009","doi-asserted-by":"publisher","DOI":"10.1007\/BF01807505"},{"key":"S095679680000157X_ref006","first-page":"293","volume-title":"16th ACM Symp. on Principles of Programming Languages","author":"Appel","year":"1989"},{"key":"S095679680000157X_ref043","doi-asserted-by":"publisher","DOI":"10.1145\/122167.122173"},{"key":"S095679680000157X_ref032","first-page":"206","volume-title":"Proc. SIGPLAN Symp. on Programming Language Design and Implementation","author":"Reinhold","year":"1994"},{"key":"S095679680000157X_ref011","volume-title":"Technical Report PMG memo 73","author":"Augustsson","year":"1989"},{"key":"S095679680000157X_ref044","volume-title":"Technical Report CU-CS-528-91","author":"Zorn","year":"1991"},{"key":"S095679680000157X_ref014","first-page":"1","volume-title":"Proc. ACM SIGPLAN Conf. on Programming Language Design and Implementation","author":"Chase","year":"1988"},{"key":"S095679680000157X_ref013","first-page":"208","volume-title":"Symposium on LISP and Functional Programming","author":"Cardelli","year":"1984"},{"key":"S095679680000157X_ref041","first-page":"19","volume-title":"Conf. Record of the 1980 Lisp Conf.","author":"Wand","year":"1980"},{"key":"S095679680000157X_ref015","first-page":"124","volume-title":"ACM Conf. on Lisp and Functional Programming","author":"Clinger","year":"1988"},{"key":"S095679680000157X_ref022","first-page":"106","volume-title":"ACM Conf. on Lisp and Fucntional Programming","author":"Hanson","year":"1990"},{"key":"S095679680000157X_ref029","doi-asserted-by":"crossref","unstructured":"Kranz D. (1987) ORBIT: An optimizing compiler for Scheme. PhD thesis, Yale University.","DOI":"10.1145\/12276.13333"},{"key":"S095679680000157X_ref021","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380100607"},{"key":"S095679680000157X_ref026","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796800000277"},{"key":"S095679680000157X_ref039","unstructured":"System Performance Evaluation Corp. (1989) SPEC Benchmark Suite Release 1.0. October."},{"key":"S095679680000157X_ref010","doi-asserted-by":"publisher","DOI":"10.1109\/40.216746"},{"key":"S095679680000157X_ref018","first-page":"1","volume-title":"Proc. 21st Ann. ACM SIGPLAN-SIGACT Symp. on Principles of Programming Languages","author":"Diwan","year":"1994"},{"key":"S095679680000157X_ref038","first-page":"43","volume-title":"Proc. ACM Conf. on Lisp and Functional Programming","author":"Stefanovic","year":"1994"},{"key":"S095679680000157X_ref023","first-page":"44","volume-title":"IBM RISC System\/6000 Technology","author":"Hardell","year":"1990"},{"key":"S095679680000157X_ref035","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796800000708"},{"key":"S095679680000157X_ref042","first-page":"32","volume-title":"ACM Conf. on Lisp and Functional Programming","author":"Wilson","year":"1992"},{"key":"S095679680000157X_ref002","doi-asserted-by":"publisher","DOI":"10.1016\/0020-0190(87)90175-X"},{"key":"S095679680000157X_ref016","doi-asserted-by":"publisher","DOI":"10.1145\/29650.29676"},{"key":"S095679680000157X_ref008","first-page":"1","volume-title":"3rd Int. Symp. on Programming Language Implementation and Logic Programming","author":"Appel","year":"1991"},{"key":"S095679680000157X_ref017","volume-title":"DECchip(tm) 21064-AA Microprocessor Hardware Reference Manual","year":"1992"},{"key":"S095679680000157X_ref040","volume-title":"The Design and Evaluation of a High Performance Smalltalk System","author":"Ungar","year":"1986"},{"key":"S095679680000157X_ref007","first-page":"96","volume-title":"4th Int. Conf. Architectural Support for Programming Languages and Operating Systems (SIGPLAN Notices","volume":"26","author":"Appel","year":"1991"},{"key":"S095679680000157X_ref031","doi-asserted-by":"publisher","DOI":"10.1145\/15042.15043"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S095679680000157X","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:35:24Z","timestamp":1779834924000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S095679680000157X\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[1996,1]]},"references-count":44,"journal-issue":{"issue":"1","published-print":{"date-parts":[[1996,1]]}},"alternative-id":["S095679680000157X"],"URL":"https:\/\/doi.org\/10.1017\/s095679680000157x","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[1996,1]]}}}