{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,6,19]],"date-time":"2025-06-19T04:21:32Z","timestamp":1750306892082,"version":"3.41.0"},"reference-count":43,"publisher":"Association for Computing Machinery (ACM)","issue":"4S","license":[{"start":{"date-parts":[[2013,7,9]],"date-time":"2013-07-09T00:00:00Z","timestamp":1373328000000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["SIGPLAN Not."],"published-print":{"date-parts":[[2013,7,9]]},"abstract":"<jats:p>Programmers hoping to achieve performance improvements often use custom memory allocators. This in-depth study examines eight applications that use custom allocators. Surprisingly, for six of these applications, a state-of-the-art general-purpose allocator (the Lea allocator) performs as well as or better than the custom allocators. The two exceptions use regions, which deliver higher performance (improvements of up to 44%). Regions also reduce programmer burden and eliminate a source of memory leaks. However, we show that the inability of programmers to free individual objects within regions can lead to a substantial increase in memory consumption. Worse, this limitation precludes the use of regions for common programming idioms, reducing their usefulness.<\/jats:p>\n          <jats:p>We present a generalization of general-purpose and region-based allocators that we call reaps. Reaps are a combination of regions and heaps, providing a full range of region semantics with the addition of individual object deletion. We show that our implementation of reaps provides high performance, outperforming other allocators with region-like semantics. We then use a case study to demonstrate the space advantages and software engineering benefits of reaps in practice. Our results indicate that programmers needing fast regions should use reaps, and that most programmers considering custom allocators should instead use the Lea allocator.<\/jats:p>","DOI":"10.1145\/2502508.2502522","type":"journal-article","created":{"date-parts":[[2013,7,16]],"date-time":"2013-07-16T18:06:45Z","timestamp":1373998005000},"page":"46-57","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":9,"title":["OOPSLA 2002"],"prefix":"10.1145","volume":"48","author":[{"given":"Emery D.","family":"Berger","sequence":"first","affiliation":[{"name":"University of Massachusetts, Amherst, MA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Benjamin G.","family":"Zorn","sequence":"additional","affiliation":[{"name":"Microsoft Research, Redmond, WA"}],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Kathryn S.","family":"McKinley","sequence":"additional","affiliation":[{"name":"The University of Texas at Austin, Austin, TX"}],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2013,7,9]]},"reference":[{"key":"e_1_2_1_1_1","unstructured":"Apache Foundation. Apache Web server. http:\/\/www.apache.org.  Apache Foundation. Apache Web server. http:\/\/www.apache.org."},{"key":"e_1_2_1_2_1","first-page":"289","volume-title":"EMSOFT","author":"William","year":"2001","unstructured":"William S. Beebee and Martin C. Rinard. An implementation of scoped memory for Real-Time Java . In EMSOFT , pages 289 -- 305 , 2001 . William S. Beebee and Martin C. Rinard. An implementation of scoped memory for Real-Time Java. In EMSOFT, pages 289--305, 2001."},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/378993.379232"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/378795.378821"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.5555\/556706"},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/97945.97982"},{"key":"e_1_2_1_7_1","unstructured":"Dov Bulka and David Mayhew. Efficient C++. Addison-Wesley 2001.  Dov Bulka and David Mayhew. Efficient C++. Addison-Wesley 2001."},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/378795.378840"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/301618.301633"},{"key":"e_1_2_1_10_1","volume-title":"Ellis and Bjarne Stroustrop. The Annotated C++ Reference Manual","author":"Margaret","year":"1990","unstructured":"Margaret A. Ellis and Bjarne Stroustrop. The Annotated C++ Reference Manual . Addison-Wesley , 1990 . Margaret A. Ellis and Bjarne Stroustrop. The Annotated C++ Reference Manual. Addison-Wesley, 1990."},{"key":"e_1_2_1_11_1","unstructured":"Boris Fomitchev. STLport. http:\/\/www.stlport.org\/.  Boris Fomitchev. STLport. http:\/\/www.stlport.org\/."},{"key":"e_1_2_1_12_1","volume-title":"A Retargetable C Compiler: Design and Implementation","author":"Fraser Christopher W.","year":"1995","unstructured":"Christopher W. Fraser and David R. Hanson . A Retargetable C Compiler: Design and Implementation . Addison-Wesley , 1995 . Christopher W. Fraser and David R. Hanson. A Retargetable C Compiler: Design and Implementation. Addison-Wesley, 1995."},{"key":"e_1_2_1_13_1","unstructured":"Free Software Foundation. GCC Home Page. http:\/\/gcc.gnu.org\/.  Free Software Foundation. GCC Home Page. http:\/\/gcc.gnu.org\/."},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.1145\/277650.277748"},{"key":"e_1_2_1_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/378795.378815"},{"key":"e_1_2_1_16_1","unstructured":"Wolfram Gloger. Dynamic memory allocator implementations in Linux system libraries. http:\/\/www.dent.med.uni-muenchen.de\/\u00bf wmglo\/malloc-slides.html  Wolfram Gloger. Dynamic memory allocator implementations in Linux system libraries. http:\/\/www.dent.med.uni-muenchen.de\/\u00bf wmglo\/malloc-slides.html"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/512529.512563"},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380200104"},{"key":"e_1_2_1_20_1","unstructured":"David R. Hanson. C Interfaces and Implementation. Addison-Wesley 1997.  David R. Hanson. C Interfaces and Implementation. Addison-Wesley 1997."},{"key":"e_1_2_1_21_1","first-page":"125","volume-title":"Proceedings of the Winter USENIX 1992 Conference","author":"Hastings Reed","year":"1992","unstructured":"Reed Hastings and Bob Joyce . Purify : Fast detection of memory leaks and access errors . In Proceedings of the Winter USENIX 1992 Conference , pages 125 -- 136 , December 1992 . Reed Hastings and Bob Joyce. Purify: Fast detection of memory leaks and access errors. In Proceedings of the Winter USENIX 1992 Conference, pages 125--136, December 1992."},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/286860.286864"},{"key":"e_1_2_1_23_1","unstructured":"Doug Lea. A memory allocator. http:\/\/g.oswego.edu\/dl\/html\/malloc.html.  Doug Lea. A memory allocator. http:\/\/g.oswego.edu\/dl\/html\/malloc.html."},{"key":"e_1_2_1_24_1","unstructured":"Scott Meyers. Effective C++. Addison-Wesley 1996.  Scott Meyers. Effective C++. Addison-Wesley 1996."},{"key":"e_1_2_1_25_1","unstructured":"Scott Meyers. More Effective C++. Addison-Wesley 1997.  Scott Meyers. More Effective C++. Addison-Wesley 1997."},{"key":"e_1_2_1_26_1","volume-title":"Industrial-Strength Programming Techniques","author":"Milewski Bartosz","year":"2001","unstructured":"Bartosz Milewski . C++ In Action : Industrial-Strength Programming Techniques . Addison-Wesley , 2001 . Bartosz Milewski. C++ In Action: Industrial-Strength Programming Techniques. Addison-Wesley, 2001."},{"key":"e_1_2_1_27_1","unstructured":"Philip A. Nelson. bc -- An arbitrary precision calculator language. http:\/\/www.gnu.org\/software\/bc\/bc.html.  Philip A. Nelson. bc -- An arbitrary precision calculator language. http:\/\/www.gnu.org\/software\/bc\/bc.html."},{"volume-title":"Advanced Windows: the developer's guide to the Win32 API for Windows NT 3.5 and Windows 95","author":"Richter Jeffrey","key":"e_1_2_1_28_1","unstructured":"Jeffrey Richter . Advanced Windows: the developer's guide to the Win32 API for Windows NT 3.5 and Windows 95 . Microsoft Press . Jeffrey Richter. Advanced Windows: the developer's guide to the Win32 API for Windows NT 3.5 and Windows 95. Microsoft Press."},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/362422.362464"},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/363534.363546"},{"key":"e_1_2_1_31_1","volume-title":"Implementation of Functional Languages Workshop","author":"Runciman Colin","year":"1995","unstructured":"Colin Runciman and Niklas Rojemo . Lag, drag and postmortem heap profiling . In Implementation of Functional Languages Workshop , Bastad, Sweden , September 1995 . Colin Runciman and Niklas Rojemo. Lag, drag and postmortem heap profiling. In Implementation of Functional Languages Workshop, Bastad, Sweden, September 1995."},{"key":"e_1_2_1_32_1","unstructured":"SGI. The Standard Template Library for C++: Allocators. http:\/\/www.sgi.com\/tech\/stl\/Allocators.html.  SGI. The Standard Template Library for C++: Allocators. http:\/\/www.sgi.com\/tech\/stl\/Allocators.html."},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.1145\/378795.378820"},{"volume-title":"Performance Evaluation Corporation. SPEC2000","author":"Standard","key":"e_1_2_1_34_1","unstructured":"Standard Performance Evaluation Corporation. SPEC2000 . http:\/\/www.spec.org. Standard Performance Evaluation Corporation. SPEC2000. http:\/\/www.spec.org."},{"key":"e_1_2_1_35_1","unstructured":"Standard Performance Evaluation Corporation. SPEC95. http:\/\/www.spec.org.  Standard Performance Evaluation Corporation. SPEC95. http:\/\/www.spec.org."},{"key":"e_1_2_1_36_1","volume-title":"Writing Apache Modules with Perl and C. O'Reilly & Associates","author":"Stein Lincoln","year":"1999","unstructured":"Lincoln Stein , Doug MacEachern , and Linda Mui . Writing Apache Modules with Perl and C. O'Reilly & Associates , 1999 . Lincoln Stein, Doug MacEachern, and Linda Mui. Writing Apache Modules with Perl and C. O'Reilly & Associates, 1999."},{"key":"e_1_2_1_37_1","volume-title":"The C++ Programming Language","author":"Stroustrup Bjarne","year":"1991","unstructured":"Bjarne Stroustrup . The C++ Programming Language , Second Edition. ( Addison-Wesley) , 1991 . Bjarne Stroustrup. The C++ Programming Language, Second Edition. (Addison-Wesley), 1991."},{"key":"e_1_2_1_38_1","unstructured":"Suzanne Pierce. PPRC: Microsoft's Tool Box. http:\/\/research.microsoft.com\/research\/pprc\/mstoolbox.asp.  Suzanne Pierce. PPRC: Microsoft's Tool Box. http:\/\/research.microsoft.com\/research\/pprc\/mstoolbox.asp."},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1006\/inco.1996.2613"},{"key":"e_1_2_1_40_1","doi-asserted-by":"publisher","DOI":"10.5555\/522344.825680"},{"key":"e_1_2_1_41_1","first-page":"1","volume-title":"Software Practice & Experience, number 26","author":"Vo Kiem-Phong","year":"1996","unstructured":"Kiem-Phong Vo . Vmalloc: A general and efficient memory allocator . In Software Practice & Experience, number 26 , pages 1 -- 18 . Wiley , 1996 . Kiem-Phong Vo. Vmalloc: A general and efficient memory allocator. In Software Practice & Experience, number 26, pages 1--18. Wiley, 1996."},{"key":"e_1_2_1_42_1","doi-asserted-by":"publisher","DOI":"10.1145\/74850.74862"},{"key":"e_1_2_1_43_1","series-title":"Lecture Notes in Computer Science, 986","volume-title":"Dynamic storage allocation: A survey and critical review","author":"Wilson P. R.","year":"1995","unstructured":"P. R. Wilson , M. S. Johnstone , M. Neely , and D. Boles . Dynamic storage allocation: A survey and critical review . Lecture Notes in Computer Science, 986 , 1995 . P. R. Wilson, M. S. Johnstone, M. Neely, and D. Boles. Dynamic storage allocation: A survey and critical review. Lecture Notes in Computer Science, 986, 1995."},{"key":"e_1_2_1_44_1","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380230704"}],"container-title":["ACM SIGPLAN Notices"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/2502508.2502522","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/2502508.2502522","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T08:18:54Z","timestamp":1750234734000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/2502508.2502522"}},"subtitle":["Reconsidering custom memory allocation"],"short-title":[],"issued":{"date-parts":[[2013,7,9]]},"references-count":43,"journal-issue":{"issue":"4S","published-print":{"date-parts":[[2013,7,9]]}},"alternative-id":["10.1145\/2502508.2502522"],"URL":"https:\/\/doi.org\/10.1145\/2502508.2502522","relation":{},"ISSN":["0362-1340","1558-1160"],"issn-type":[{"type":"print","value":"0362-1340"},{"type":"electronic","value":"1558-1160"}],"subject":[],"published":{"date-parts":[[2013,7,9]]},"assertion":[{"value":"2013-07-09","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}